Sipatshi: Regex

Beitrag lesen

1.) Mit folgendem Ausdruck: "/o(.*(]|));/msU" möchte ich alle Parts im $string matchen die mit 'o(' beginnen und bei erstem vorkommen auf '];' oder ');' enden. Allerdings werden auch Bereiche gematched die nicht "wirklich" zum Muster passen. Siehe unten Ergebnis Position 1 und 2!

Passen doch alle auf dein Muster. Definiere bitte in Worten, wann der Ausdruck nicht gefunden werden soll.

Das erinnert mich an den Blacklist Ansatz ! Wenn ich jetzt in Worten definieren soll, wann der Ausdruck nicht gefunden werden soll, könnte ich nicht alle Möglichkeiten aufzählen. Es ist doch besser zu definieren, wann es zutrifft:

Der Audruck passt nur dann:

1.) Wenn auf den Funktionsaufruf o(/*...*/) ein/mehrere Methodenaufruf/e oder ein/mehrere array Index/e folgen oder optinal auf den array Index ein/mehrere Methodenaufrufe/e folgen. Das ganze soll immer mit einem Semikolon enden.

z.B. wie hier:

o("Hello World")->get("boo")["foo"]  
                ->reserve()["chuck"]  
                ->final("end");

oder

o("Hello World")->get("boo");

oder

o("Hello World")[3];

o("Hello World")->method()->method()[1][2]->method();

Verstanden?

2.) Dann gibt es noch folgende Fälle. Da weis ich nicht wirklich wie ich an die Sache ran gehen soll. z.B. der Ausdruck(siehe oben) der innerhalb if()/elsif()/for()/foreach()/while()/usw vorkommen kann.
Vielleicht ist der Punkt 1 und 2 anders zu löschen. Also ohne Reguläre Ausdrücke! Ich bitte um konstruktive Vorschläge

Schreib einen Parser, der sich mit den Regeln des Codes auskennt und beliebige Verschachtelungen zu erkennen in der Lage ist. Der Tokenizer kann dir zumindest beim Erkennen der syntaktischen Elemente PHPs helfen. preg... ist zwar in der Lage, Rekursionen in Mustern zu erkennen (z.B. zusammengehörige Klammernpaare), aber das klappt nicht in jedem Fall (z.B. einzelne Klammern in Strings versteckt).

Das muss ich mir in Ruhe anschauen! Kannte ich bis Dato nicht. Es scheint/sieht nach einer schwergewichte Kost aus. Gerne möchte ich das ganze mit Regulären Ausdrücken löschen!