Carsi: RegExp

Hi!

Ich habe folgende String-Möglichkeiten in einem Template:
{foo}
{foo:bar}

Nun möchte ich, dass preg_match_all mir diese liefert.
Nummer eins ist kein Problem: /{([0-9a-z])}/i
Jedoch weiß ich nicht wie ich die _optionale_ Nummer zwei einbauen soll.

Ich habe mir ein paar RegExp Seiten angeschaut es aber nicht zum laufen bekommen.
Ich würde mich freuen wenn mir jemand zeigen könnte wie es aussieht.

mfg Carsi

  1. Hi,

    Jedoch weiß ich nicht wie ich die _optionale_ Nummer zwei einbauen soll.

    "optional" wird in Regular Expressions durch ein Fragezeichen notiert.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Moin!

      "optional" wird in Regular Expressions durch ein Fragezeichen notiert.

      Das weiß ich aber: /{([a-z]:?)([0-9a-z])}/i funzt nicht.
      Ich weiß nicht wie ich 'es' korrekt davor setze.

      rgds
      Carsten

      1. Hi,

        Das weiß ich aber: /{([a-z]:?)([0-9a-z])}/i funzt nicht.

        was heißt "funzt"? Du hast hier genau den Doppelpunkt optional gemacht.

        Ich weiß nicht wie ich 'es' korrekt davor setze.

        Danach, nicht davor.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Hallo Carsten,

        Ich finde es hilfreich bei RegExp schrittweise vorzugehen, also

        • geschweifte Klammer      {
        • gefolgt von Buchstaben   [a-z]
        • die ein- oder mehrmals
            vorkommen                +
        • gefolgt von Doppelpunkt  :
        • der optional ist         ?
        • gefolgt von Buchstaben   [a-z]
        • die null- oder mehrmals
            vorkommen                *
          usw.
          Regex Coach ist dabei eine gute Hilfe, insbesondere Wenn es ums Ausescapieren von bestimmten Zeichen geht.

        Gruß,

        Dieter

        1. Hallo Dieter!

          Ich möchte das 'foo:' optional ist, nicht der Doppelpunkt :D

          /{([a-z])}/i - so klappt es ja wunderbar

          Nun mit der zweite teil davor:
          /{(ZWEI)([a-z])}/i

          ZWEI soll optional sein. also:
          /{([a-z]:?)([a-z])}/i

          Aber leider gibt er mir keine Treffer aus

          Es soll entweder {foo} oder {foo:bar} gefunden werden.

          mfg, Carsi

          1. Hi,

            ZWEI soll optional sein. also:

            nein, (ZWEI) soll optional sein. Also?

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. nein, (ZWEI) soll optional sein. Also?

              ([a-z]:)?([a-z])
              oder
              (([a-z]:)?)([a-z])

              ? ^^

              1. Hi,

                ([a-z]:)?([a-z])
                oder
                (([a-z]:)?)([a-z])

                ja, beispielsweise. Zumindest im Ansatz. Du möchtest Dich noch mit Quantifiern und Subpattern beschäftigen.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
                1. Moin!

                  ja, beispielsweise. Zumindest im Ansatz. Du möchtest Dich noch mit Quantifiern und Subpattern beschäftigen.

                  Also ich habe mich nun mit http://www.regenechsen.de/regex_de/regex_3_de.html beschäftigt
                  und jetzt klappt es auch:
                  /{(([a-z]+:)?)([a-z]+)}/i

                  Kann ich das ganze noch irgendwie verkürzen?

                  rgds, Carsten

                  1. Hi,

                    Kann ich das ganze noch irgendwie verkürzen?

                    hast Du Dich vertippt? "Verbessern" kann ich ja verstehen, aber "verkürzen" macht keinen Sinn. Verbessern kannst Du es mit Subpatterns; der Code wird dadurch etwas länger (was zu exakt 100% egal ist).

                    Cheatah

                    --
                    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
                    1. Danke für die Geduld, Cheatah!

                      rgds, Carsten