Jörg: Regex

Hallo,

habe ich einen Denkfehler bei dieser Regex, denn sie funktioniert nocht ganz, wie gewünscht:

/[\/?[li|ul|td|tr|table|code|quote|list|ol)]]$/

Gesucht sind alle öffnenden, sowie schließenden BBcodes am Stringende.

Daher dachte ich.

[ :   soll vorkommen
\/? : Slash soll danach vorkommen oder auch nicht
[ : Öffnende Klammer der nachfolgenden Auswahl
[li|ul|td|tr|table|code|quote|list|ol)] : Diese bbcodes dürfen drin stehen
] : Schließende Klammer der Auswahl
$ : Nur Zeilenende interessiert

Ich lese mich gerade neu ein in reguläre Ausdrücke, v ielleicht habe ich da noch etwas missverstande?

Jörg

  1. Hallo Jörg,

    [li|ul|td|tr|table|code|quote|list|ol)] : Diese bbcodes dürfen drin stehen

    so nicht - die eckigen Klammern stehen für ein Zeichen aus der darin enthaltenen Menge. Dieser Teilausdruck bedeutet also:
    ein Zeichen aus der Menge [abcdeiloqrstu)]

    Ist die schließende runde Klammer ein Unfall? Denn eigentlich ist die gar nicht so weit weg vom richtigen Pfad: In runde Klammern kannst du tatsächlich einen Teilausdruck klammern, und innerhalb davon geht auch die Oder-Verknüpfung, die du gemeint hast: (Stumpf|Blöd|Wider)sinn

    Ich lese mich gerade neu ein in reguläre Ausdrücke, v ielleicht habe ich da noch etwas missverstande?

    Bestimmt. Und bestimmt wird das noch öfter vorkommen.

    Live long and pros healthy,
     Martin

    --
    Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren.
    1. Hallo Martin,

      danke für den Hinweis.

      Muss denn die eckige Klammer maskiertw erden?

      Weil das hier scheint dann zu funktionieren:

      /\[\/?(li|ul|td|tr|table|code|quote|list|ol)\]$/
      

      Jörg

      P.S:

      Ist die schließende runde Klammer ein Unfall?

      Wenn schon, dann ein freud'scher ebensolcher 😉

      1. Hallo Jörg,

        Muss denn die eckige Klammer maskiertw erden?

        wenn sie nicht die Regex-Sonderbedeutung "Kennzeichnung einer Zeichenklasse" haben soll, ja.

        Weil das hier scheint dann zu funktionieren:

        /\[\/?(li|ul|td|tr|table|code|quote|list|ol)\]$/
        

        Genau: Die eckigen Klammern sind "wörtlich" gemeint und müssen deshalb mit einem Backslash maskiert werden, damit sie ihre Sonderrolle verlieren. Bei der schließenden Klammer geht's auch ohne, glaube ich, aber das finde ich unsauber.

        Ist die schließende runde Klammer ein Unfall?

        Wenn schon, dann ein freud'scher ebensolcher 😉

        *fg*

        Live long and pros healthy,
         Martin

        --
        Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren.
        1. Hallo Martin,

          dann danke für die Hilfe 👍

          Jörg

          1. Hallo Jörg,

            https://regex101.com/

            Probierstube und Erklärungen zum Tyrannosuchus Regex

            Rolf

            --
            sumpsi - posui - obstruxi