StringRegExp Problem

  • Hallo Freunde der Unterhaltung,

    heut hab ich mal das Problem mit StringRegExp...

    Ich hab mir schon den ganzen Tag von SEuBo durchgelesen und auch etwas davon umgesetzt, allerdings bei einem hab ich noch Probleme. Evtl kann mir da wer den entscheidenen Tipp geben.

    Von unserer Intranetseite lese ich den Quellcode aus und sucher dort einen bestimmten String. Dieser sieht immer so aus:

    X of XX

    Wobei die "X" für eine variierende Zahl steht.

    [autoit]

    $aResult = StringRegExp($sHTML,"(?i)\b of \d{1,3}",3)

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($aResult)

    [/autoit]

    Mit diesem RegExp gibt er mir den Treffer " of XX" aus... das ist auch gut so. Nun möchte ich aber zum Beispiel nur die Zahl ganz am Schluss auslesen um diese ausgeben zu können.

    Angenommen der Quellcode ist jetzt "1 of 20" gibt mein jetziges Snippet " of 20" wieder zurück. Ich möchte aber das nur "20" zurückgegeben wird. So kann ich nämlich ausgeben wieviele Fälle auf unserer Workingqueue drauf sind.

    [autoit]


    $iResult = StringRegExp($sHTML,"(?i)\b of \d{1,3}",".*(\d{1,3}).*",3)
    MsgBox(0,"",$iResult)
    _ArrayDisplay($iResult)

    [/autoit]

    Funktioniert nicht - er "frisst" nicht die Sachen Vor und Nach der gefunden Ziffer auf und gibt nur diese wieder. Stattdessen findet er den String gar nicht mehr :(

    Was mache ich falsch?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    Einmal editiert, zuletzt von mirko2002 (14. Dezember 2012 um 16:01)

  • Oohhh... das ist mir gar nicht aufgefallen :D

    [autoit]


    $sHTML = _IEDocReadHTML ($oIE)
    $aResult = StringRegExp($sHTML,"(?i)\b of \d{1,3}",3)
    _ArrayDisplay($aResult)

    [/autoit][autoit]


    $sHTML = _IEDocReadHTML ($oIE)
    $iResult = StringRegExp($sHTML,"(?i)\b of .*(\d{1,3}).*",3)
    _ArrayDisplay($iResult)

    [/autoit]

    Habs jetzt korrigiert... erstes Beispiel wirft "of 20" aus... - das ist auch korrekt.

    Zweites Beispiel wirft einfach nur "1" aus... das ist nicht korrekt. Und ich woas net warum? :(

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Was du in runde Klammern schreibst wird dir als Gruppe zurückgegeben.
    Du musst also um dein \d{1,3} die Klammer machen.
    Im ersten Beispiel gibst du gar keine Klammer an - also wird der ganze Match gefunden.

    Ich habs mal als Beispiel so umgesetzt:

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    Global Const $sHTML = "1 of 20"
    Global $a_Result = StringRegExp($sHTML,"\d+ of (\d+)",3)
    _ArrayDisplay($a_Result)

    [/autoit]
  • Ah... ok alles klar... habs noch mal etwas umgeschrieben aber das Beispiel haut hin... wunderbar. Vielen Dank, RegExp ist nicht wirklich einfach zu verstehen ;)

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.