sandra: preg_match regexp problem

Hallo zusammen,

ich beschäftige mich gerade mit Regular Expressions und stehe vor folgendem Problem:

Ich möchte Prüfen, ob in einem String folgender Tag auftaucht:
<bild/79>

Der Tag kann allerdings auch folgende Formen annehmen:
<bild/0079>
<bild/46,79>
<bild/79/unterschrift>
<bild/046,0079/unterschrift>

Nun übergebe ich als Suchstring nur die 79 und möchte immer ein TRUE, wenn die ID 79 (mit oder ohne vorangestellte Nullen) im Tag angegeben ist.

Hinter der 79 muss also ein Slash, Komma oder Eckigeklammerzu sein,
und vor der 79 muss <bild/ und eventuell Nullen bzw Zahl,Zahl,Nullen etc. stehen.

Meine Abfrage sieht wie folgt aus:

preg_match("/\<bild[(\/)(\/0)(\/00)(\/000)(.*\,)(.*\,0)(.*\,00)(.*\,000)]".$q."[\>\/\,]/iU",$string);

Leider ist das so nicht richtig. Also meine Gedankengang war der:

<bild muss immer davor stehen.

dann habe ich zwischen [] unterschiedliche Alternativen in () gesetzt, was eben vor der 79 ($q) kommen kann.

Hinter der 79 muss eines der 3 Zeichen >/, stehen.

Kann mir jemand helfen, wo ich da genau die Syntax falsch verstanden habe?

Vielen Dank
Sandra

  1. Kann mir jemand helfen, wo ich da genau die Syntax falsch verstanden habe?

    Vermutlich bei den Subpatterns.

    1. Hi,

      Kann mir jemand helfen, wo ich da genau die Syntax falsch verstanden habe?

      Vermutlich bei den Subpatterns.

      Nein, eher bei den Zeichenklassen.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Hi,

    Hallo zusammen,

    ich beschäftige mich gerade mit Regular Expressions und stehe vor folgendem Problem:

    Ich möchte Prüfen, ob in einem String folgender Tag auftaucht:
    <bild/79>

    Der Tag kann allerdings auch folgende Formen annehmen:
    <bild/0079>
    <bild/46,79>
    <bild/79/unterschrift>
    <bild/046,0079/unterschrift>

    Nun übergebe ich als Suchstring nur die 79 und möchte immer ein TRUE, wenn die ID 79 (mit oder ohne vorangestellte Nullen) im Tag angegeben ist.

    Hinter der 79 muss also ein Slash, Komma oder Eckigeklammerzu sein,
    und vor der 79 muss <bild/ und eventuell Nullen bzw Zahl,Zahl,Nullen etc. stehen.

    Da Dein Regex / enthält, würde ich ein anderes Delimiter-Zeichen als / wählen. z.B. ~

    Am Anfang muß <bild/ stehen.
    Danach soll eine beliebige Anzahl von Zahlen mit folgendem Komma stehen: (?:[0-9]+,)*
    Danach soll eine beliebige Anzahl von Nullen stehen: 0*
    Danach die 79
    Danach Komma oder Slash oder größergleich: [,/>]

    Zusammengebaut: ~<bild/(?:[0-9]+,)*0*79[,/>]~

    dann habe ich zwischen []

    [] schließen eine Zeichenklasse ein.
    [(/)(/0)(/00)(/000)(.*,)(.*,0)(.*,00)(.*,000)] ist gleichbedeutend mit [/()0.*,], also einem der Zeichen Slash, Klammer-Auf, Klammer-Zu, Ziffer-Null, Punkt, Stern, Komma.

    unterschiedliche Alternativen in () gesetzt

    für Alternativen gibt es |

    Kann mir jemand helfen, wo ich da genau die Syntax falsch verstanden habe?

    An so ziemlich allen Stellen, beginnend mit Zeichenklassen, gefolgt von Alternativen ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Zusammengebaut: ~<bild/(?:[0-9]+,)*0*79[,/>]~

      ~<bild/(?:[0-9]+,)*0*79(,|/)?.*?>~
      oder falls zutreffend
      ~<bild/(?:[0-9]+,)*0*79(,|/)?[a-z]*?>~
      erscheint mir etwas sicherer, schließlich sollte ein Tag geschlossen sein.