regex_search wie funktioniert das mit Group ?



  • Hallo an Alle!

    Ich versuche das zu matchen:
    (Ich benutze: R"(string)"; damit ich mich nicht um die \ kümmern muss.)

    1.e4 c6 2.d4 d5 3.Nc3 dxe4 4.Nxe4
    

    Aber es will mir nicht gelingen. Ich versuche es mit eine Gruppe aber es klappt nicht.

    Wenn sowetwas matchen soll:

    "abcdeabc"
    

    mache ich das so:

    Der Reguläre Ausdruck:

    "(abc)de\1"
    

    Das matcht zb.: abcdeabc soweit verstehe ich das noch.

    Ich verwende regex_search um alle Treffer zu bekommen.

    Jetzt zum obigen:

    Zuerst eine Zahl dann, ein Punkt, irgendwelche Buchstaben gefolgt von einer Zahl ein Lehrzeichen und nochmal irgendwelche Buchstaben gefolgt von einer Zahl

    "[0-9]+\.([a-zA-Z]+[0-9]+) \1"
    

    Das wäre meine Idee aber das mit der Gruppe funktioniert nicht

    so funktioniert es soweit:

    "[0-9]+\.([a-zA-Z]+[0-9]+) [0-9]+.([a-zA-Z]+[0-9]+)"
    

    bzw:

    "[0-9]+\.[a-zA-Z]+[0-9]+ [a-zA-Z]+[0-9]+"
    

    aber ich will ja den hinteren Teil optional ? Wie macht man das ?

    Wo denke ich da falsch ? Ich verstehe nich warum hier die Gruppe nicht funktioniert ?

    Grüße,
    Martin,



  • Ohne in der Doku nachzusehen: \1 dürfte doch wohl den Text noch einmal matchen, wie die Gruppe zuvor. Wenn sich der Text also nicht wiederholt, wird es nichts mit dem Match.



  • martin_zi schrieb:

    aber ich will ja den hinteren Teil optional ? Wie macht man das ?

    Optional geht mit "?".
    \1, \2 etc sind Backreferenzen, sie matchen also exakt das, das in der vorherigen Gruppe gematcht wurde. Das würde bei dir bedeuten, dass Schwarz denselben Zug wie Weiß machen müsste.

    Bedenke aber, dass deine Regexp. unvollständig ist. Was ist mit 0-0, 0-0-0, exd5 e.p., Qc4+, N4g5, Nbd7 oder ähnlichen Zügen? Warum außerdem "[0-9]" statt "[1-8]" und warum "[a-z]", wenn die Felder doch nur von a-h gehen?

    Es gibt ansonsten auch bestimmt fertige pgn-Parser.

    (PS: ich hab nur ca. 1600 dwz)



  • manni66 schrieb:

    Ohne in der Doku nachzusehen: \1 dürfte doch wohl den Text noch einmal matchen, wie die Gruppe zuvor. Wenn sich der Text also nicht wiederholt, wird es nichts mit dem Match.

    Aaaach das bezieht sich auf den Text 😮 Danke jetzt ist mir das klar! 🙂

    [0-9]+\.([a-zA-Z]+[0-9]+ *)+
    

    wob schrieb:

    Bedenke aber, dass deine Regexp. unvollständig ist. Was ist mit 0-0, 0-0-0, exd5 e.p., Qc4+, N4g5, Nbd7 oder ähnlichen Zügen? Warum außerdem "[0-9]" statt "[1-8]" und warum "[a-z]", wenn die Felder doch nur von a-h gehen?

    Ja ist mir klar es war nur mal ein Anfang man muss ja klein anfangen um alles zu verstehen.

    wob schrieb:

    Es gibt ansonsten auch bestimmt fertige pgn-Parser.
    (PS: ich hab nur ca. 1600 dwz)

    Nö nö will selber herumprobieren 😉 sonst lerne ich ja nichts.

    (PS: keine Ahnung wo ich stehe)


Anmelden zum Antworten