Reguläre Ausdrücke n-Mal wiederholt

  • Hallo miteinander,

    ich möchte ein Suchmuster (Reguläre Ausdrücke) wiederholen jedoch versehe ich nihct wie ich das in ein Gruppe packe die sich unendlich oft wiederholen darf.

    Testen tue ich das hier: https://regex101.com/r/9v450w/2

    Mein String ist HTML Code.

    Lesen möchte ich den Inhalt einer Tabelle

    Auszug vom HTML Code:

    Mein StringRegExp Syntax: class="spec table table-condensed product-spec-tabs".\s*<tbody><tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td>\s*<\/tr>\s*<tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td>

    Zu wiederholen: \s*<\/tr>\s*<tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td>

    Ich habe auf verschiedenen Seiten jetzt gesehen das wenn man eine Eckige Klammer [] um einen Teil macht und Plus (+) bzw. ein Mal (*) danach schreibt das man dann die gesamte folge wiederholen kann.

    leider klappt das bei mir nicht, daher habe ich entweder etwas Falsch verstanden, oder Fehlerhaft zusammen gebaut.

    hat mir jemand einen Tipp? oder kann mir weiterhelfen?

    gruß Mücke

    • Offizieller Beitrag

    Eckige Klammern bilden eine Klasse. Du kannst dort z B. mehrere Zeichen, die an dieser Stelle, in beliebiger Folge, auftreten dürfen zusammenfassen. Außerhalb der Klammer kannst du dann die üblichen Multiplier setzen: + oder *.

    Es gibt auch vorgefertigte Klassen, kannst du im Detail in der Hilfe zu StringRegEx nachlesen.

    Um das mehrfache Auftreten zu matchen, bildest du eine Gruppe durch (...) und setzt das Flag 3 in der Abfrage. Dann hast du ein Ergebnisarray mit den Treffern.

  • Hier auf die Schnelle eine Lösung (ohne RegEx) aus dem engl. Forum :

    Autor : Chimp

    Quelle : https://www.autoitscript.com/forum/topic/16…comment=1225680

    Sieht natürlich erst mal gewaltig aus ^^.

    Den verkürzten HTML-Code habe ich zum Test als Textdatei beigefügt.

    Gruß Musashi

  • Musashi : Danke für den Link, jedoch würde ich das gerne mit RegEx hin bekommen. Wenn es denn Möglich ist.

    Eckige Klammern bilden eine Klasse. Du kannst dort z B. mehrere Zeichen, die an dieser Stelle, in beliebiger Folge, auftreten dürfen zusammenfassen. Außerhalb der Klammer kannst du dann die üblichen Multiplier setzen: + oder *.

    Es gibt auch vorgefertigte Klassen, kannst du im Detail in der Hilfe zu StringRegEx nachlesen.

    Um das mehrfache Auftreten zu matchen, bildest du eine Gruppe durch (...) und setzt das Flag 3 in der Abfrage. Dann hast du ein Ergebnisarray mit den Treffern.

    Eklige Klammern Bilden die Klasse für ein "Such Schema"?

    die Runden Klammern definieren was ich wider ausgeben kann. und gleichzeitig das dies Öffners vorkommen kann? das verwirrt mich etwas.

    was ich bisher habe:

    AutoIt
    #include <IE.au3>
    #include <Array.au3>
    
    Local $Url = "https://www.motointegrator.de/artikel/1192373-stossdaempfer-sachs-315-482"
    Local $oIE = _IECreate($Url)
    Local $CODE_HTML = _IEBodyReadHtml ($oIE)
    _IEQuit($oIE)
    
    Local $Ergebnis = StringRegExp($CODE_HTML, 'class="spec table table-condensed product-spec-tabs".\s*<tbody><tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td>\s*<\/tr>\s*<tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td>', 3)
    _ArrayDisplay($Ergebnis)

    Die Runden Klammern verwende ich ja schon.

    Wenn ich den Text \s*<\/tr>\s*<tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td> noch ein paar mal hintereinander in mein Suchschema eintippe dann findet er die Dinge auch. Sobald ich Eklige oder Runde Klammern darum setze klappt das nicht mehr.

    Wo habe ich den Denkfehler?

    Das sollte später so ausschauen:

    Start: class="spec table table-condensed product-spec-tabs".\s*<tbody><tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td>

    Wiederholen unendlich: \s*<\/tr>\s*<tr>\s*<td>(.*):<\/td>\s*<td>(.*)<\/td>

    Ende: \s*<\/tr>\s*<\/tbody>

    Das ganze nur im StringRegExp.