RegEx Feld lesen

  • Ich habe in meiner Zwischenablage
    einen Quelltext!

    Spoiler anzeigen


    <input type="text" value="Deutschland" onfocus="select();" onclick="searchBarObj.checkOrtswechselValue(this, 'mt-us-form-error-list');searchBarObj.hideErrorIcon('ortswechsel_error_us');" onkeydown="dropStoredLocation();" name="Hundesuche" tabindex="2" id="searchphraseloc" autocomplete="off" class="">

    Diesen Inhalt möchte ich nun mit RegEx auslesen

    [autoit]


    $Speicher=ClipGet()

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

    $result =StringRegExpReplace($Speicher,"(name=)(.*)",'$1')

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

    MsgBox(4096, "Fertig:", $result)

    [/autoit]

    Also Hundesuche ohne den anderen Text!
    Ich hoffe Ihr könnt mich erlösen.

    Einmal editiert, zuletzt von Ilse (5. Oktober 2010 um 10:43)

  • Weiß echt nicht warum alle immer RegEx wollen wenn es so doch auch geht:

    [autoit]

    #include <String.au3>

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

    $Speicher=ClipGet()

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

    $result =_StringBetween($Speicher,'name="','"')

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

    MsgBox(4096, "Fertig:", $result[0])

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Weil RegEx so profihaft aussieht. (Gehöre zu der Programmierergruppe: "Erst Stringen, dann RegExen")

  • Danke CHIP,

    funktioniert prima.
    hm... ich habe gelesen, daß man viele Dinge nur wirklich mit RegEx lösen kann.
    Sieht bestimmt mit RegEx etwas komplizierter aus.

    Zitat

    Erst Stringen, dann RegExen

    Werd ich mir merken!
    Habt Ihr noch ein Beispiel für RegEx?
    Einfach zum lernen und verstehen...

    Dank Euch...
    Ilse ;)

  • Hier noch ein Beispiel:

    Spoiler anzeigen
    [autoit]

    Global $aText[2]

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

    $aText[0] = "http://www.autoit.de/index.php?page=Index"
    $aText[1] = "http://www.codeproject.com/KB/dotnet/regextutorial.aspx"

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

    For $i = 0 To 1
    $aRegEx = StringRegExp($aText[$i], "[^\.]+\.([^\.]+)", 3)
    MsgBox(0, "StringRegExp: " & $i + 1, $aRegEx[0])
    Next

    [/autoit]
  • Zitat von chip

    Weiß echt nicht warum alle immer RegEx wollen wenn es so doch auch geht:

    Zitat von m-obi

    Weil RegEx so profihaft aussieht. (Gehöre zu der Programmierergruppe: "Erst Stringen, dann RegExen")

    _StringBetween()
    [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _StringBetween
    ; Description ...: Returns the string between the start search string and the end search string.
    ; Syntax.........: _StringBetween($s_String, $s_start, $s_end[, $v_Case = -1])
    ; Parameters ....: $s_String - The string to search.
    ; $s_start - The beginning of the string to find. Passing a blank string starts at the beginning
    ; $s_end - The end of the string to find. Passing a blank string searches from $s_start to end
    ; $v_Case - Optional: Case sensitive search. Default or -1 is not Case sensitive else Case sensitive.
    ; Return values .: Success - A 0 based $array[0] contains the first found string.
    ; Failure - 0
    ; |@Error - 1 = No inbetween string found.
    ; Author ........: SmOke_N (Thanks to Valik for helping with the new StringRegExp (?s)(?i) isssue)
    ; Modified.......: SmOke_N - (Re-write for speed and accuracy)
    ; Remarks .......: 2009/05/03 Script breaking change, removed 5th parameter
    ; Related .......:
    ; Link ..........:
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _StringBetween($s_String, $s_Start, $s_End, $v_Case = -1)

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

    ; Set case type
    Local $s_case = ""
    If $v_Case = Default Or $v_Case = -1 Then $s_case = "(?i)"

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

    ; Escape characters
    Local $s_pattern_escape = "(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)"
    $s_Start = StringRegExpReplace($s_Start, $s_pattern_escape, "\\$1")
    $s_End = StringRegExpReplace($s_End, $s_pattern_escape, "\\$1")

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

    ; If you want data from beginning then replace blank start with beginning of string
    If $s_Start = "" Then $s_Start = "\A"

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

    ; If you want data from a start to an end then replace blank with end of string
    If $s_End = "" Then $s_End = "\z"

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

    Local $a_ret = StringRegExp($s_String, "(?s)" & $s_case & $s_Start & "(.*?)" & $s_End, 3)

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

    If @error Then Return SetError(1, 0, 0)
    Return $a_ret
    EndFunc ;==>_StringBetween

    [/autoit]

    ;)

  • Zitat

    ich habe gelesen, daß man viele Dinge nur wirklich mit RegEx lösen kann.

    ja, 0.0234% aller "Dinge" kann man nur mit RegExp lösen. Ggf ist Regexp kürzer, schneller oder auch "professioneller"...manchmal!
    Aber die "normalen" Stringbefehle machen ihre Sache genausogut. Mit dem Vorteil, dass "jeder" sie nachvollziehen kann.
    Und man kann sie oft wesentlich leichter anpassen, ohne die komplette RegExp umzuschreiben.
    Was nichts daran ändert, dass RegExp eine sehr mächtige Waffe ist!

    Und da 1000 Wege nach Rom führen....

    Spoiler anzeigen
    [autoit]

    Global $aText[2]

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

    $aText[0] = "http://www.autoit.de/index.php?page=Index"
    $aText[1] = "http://www.codeproject.com/KB/dotnet/regextutorial.aspx"

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

    For $i = 0 To 1
    $ersterPunkt=stringinstr($atext[$i],".") ;positionen der "." finden
    $zweiterPunkt=stringinstr($atext[$i],".",1,1,$ersterPunkt+1)
    $string=stringmid($atext[$i],$ersterpunkt+1,$zweiterpunkt-$ersterPunkt-1) ;dazwischen steht der gesuchte string
    MsgBox(0, "String: " & $i + 1, $string)
    Next

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

    For $i = 0 To 1
    $string=stringtrimleft($atext[$i],stringinstr($atext[$i],".")) ;string bis zum ersten punkt abschneiden
    $string=stringleft($string,stringinstr($string,".")-1) ;String bis zum nächsten punkt anzeigen
    MsgBox(0, "String: " & $i + 1, $string)
    Next

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

    For $i = 0 To 1
    $a=stringsplit($atext[$i],".",3) ;string zerteilen
    MsgBox(0, "String: " & $i + 1, $a[1]) ;;array[1] anzeigen
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Eben genau aus diesem Grunde verstehe ich es nicht warum das Rad immer neu erfunden wird wenn es _StringBetween schon hat.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • [offtopic]

    chip:

    Weil die UDF intern nicht mit den "normalen" String-Funktionen arbeitet und alle möglichen Strings korrekt verarbeiten möchte, braucht es gleich drei StringRegExp... für eine Aufgabe, die man locker mit einem erledigen kann.

    Ich finde das "suboptimal". ;)

    [/offtopic]