Jörk Behrends: bzw. (PHP) regular expressions

Beitrag lesen

Hallo!

Das kannst Du afaik ab Perl 5.00X mit vorausschauender Suche:
-> /irgendwas(?!wasanderes)nochwas/  findet "irgendwas" auf das auf keinen Fall "wasanderes" folgt.

Genau das war's was ich gesucht habe (wäre ja auch seltsam gewesen, wenn es mit Perl reg.exp. nicht ginge). Etwas Äquivalentes habe ich bei Possix allerdings nicht gefunden :-(

Aufpassen muss man mit den Dingern aber schon:

Wenn z.B. - wie oben angegeben - "nochwas" ein konkreter Text ist, macht das Vorrausschauen nach "wasanderes" keinen Sinn.

In der Regeln möchte man eine Textbereich suchen, der aus einem bestimmten Satz von Zeichen bestehen kann ( [a-z,_-] ), aber einen konkreten Ausschlusstext nicht enthält. Wenn man das einfach in Form von
/[a-z,_-]*(?!noprint)[a-z,_-]*/
anwendet, wird es nicht funktionieren (auch nicht mit ? am Stern)! Die RegExp kann ja so "verschoben" werden, dass der zweite Teil nie mit "noprint" anfängt. Was man hier also machen muss? Hinter jedem einzelnen Zeichen aus der Auswahl darf der Ausschlusstext nicht vorkommen:
/(a-z,_-)*/

Wenn der Ausschlusstext nicht allzu aufwendig ist, kann sich das Konstrukt auch selbst basteln - möglicherweise wird so etwas dann schneller verarbeitet als das ewige Vorausschauen (hier nur mit "nop" ;-):
/([a-mo-z,_-]n[a-mp-z,_-]no[a-mq-z,_-])*/    oder
/([a-mo-z,_-]n(?!o)no(?!p))*/

Viel Spass,
   Jörk