StringRegExp Problem

  • huhu,
    habe heute wieder mal ein kleines Problem :
    habe mal das wichtigste in nen Code gepackt :

    [autoit]

    #include <Array.au3>

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

    $input = InputBox("Daten eingeben", "Daten eingeben :")
    $aStrreg = StringRegExp($input,'(?:<span title="(.+)"><a href=".+">.+</a></span>|<a href=".+">(.+)</a>)' , 3)
    _ArrayDisplay($aStrreg)

    [/autoit]


    Wenn ich nun in die Input

    Code
    <span title="Max Mustermann"><a href="www.google.de">Max Mus..mann</a></span>


    zum Beispiel einfüge , klappt alles.
    Wenn ich nun den 2.Teil benutze

    Code
    <a href="www.google.de">Max Mustermann</a>


    nehme, habe ich aber ein leeres Element im RückgabeArray.

    Kann ich das komfortabler lösen, außer im Nachhinein das Array nach einem leeren String zu durchsuchen und das dann zu löschen ?

    Danke schonmal für Hilfe
    Alcros

    Einmal editiert, zuletzt von Alcros (8. Oktober 2012 um 16:37)

  • So müssts gehn, ich kanns grad nich testen:

    [autoit]

    #include <Array.au3>

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

    $input = InputBox("Daten eingeben", "Daten eingeben :")
    $aStrreg = StringRegExp($input,'(?:<span title="(.+)"><a href=".+">.+</a></span>)|(?:<a href=".+">(.+)</a>)' , 3)
    _ArrayDisplay($aStrreg)

    [/autoit]
  • K4z : leider nein, das Ergebnis ist das selbe.
    @ Bugfix :
    Wenn ich in Input

    Code
    <span title="Max Mustermann"><a href="www.google.de">Max Mus..mann</a></span>


    schcreibe, erhalte ich das :
    [Blockierte Grafik: http://www.abload.de/img/or18yove.jpg]
    Wenn ich aber

    Code
    <a href="www.google.de">Max Mustermann</a>


    in die Input schreibe, kommt folgendes :
    [Blockierte Grafik: http://www.abload.de/img/or236ost.jpg]

    Und das Element 0 stört mich, und ich will wissen, ob ich das sofort in der RegExp verhindern kann, dass das gespeichert wird.

    • Offizieller Beitrag


    OMG - Ist es wirklich so schwer eine eindeutige Frage zu stellen?
    Ich übersetze mal:

    Der Ausgangstext kann dieser:

    Code
    <span title="Max Mustermann"><a href="www.google.de">Max Mus..mann</a></span>

    oder jener:

    Code
    <a href="www.google.de">Max Mustermann</a>

    sein.
    Mit welchem Pattern erhalte ich in jedem Fall nur
    Max Mustermann
    als Lösung?

    Ist die Fragestellung so korrekt?

    • Offizieller Beitrag

    OK

    Also da hier in jedem Fall ein ODER gefragt werden muß, wirst du in einem Fall immer ein leeres Arrayelement haben.
    Kannst du aber recht einfach händeln:

    [autoit]

    $s1 = '<span title="Max Mustermann"><a href="www.google.de">Max Mus..mann</a></span>'
    $s2 = '<a href="www.google.de">Max Mustermann</a>'

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

    ConsoleWrite(_GetMatch($s1) & @CRLF)
    ConsoleWrite(_GetMatch($s2) & @CRLF)

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

    Func _GetMatch($sString)
    Local $sPatt = '<span title="([\w\s]+)">|<a href=[^>]+>([\w\s]+)</a>'
    Local $aRet = StringRegExp($sString, $sPatt, 3)
    If Not IsArray($aRet) Then Return ''
    If $aRet[0] = '' Then Return $aRet[1]
    Return $aRet[0]
    EndFunc

    [/autoit]