phpbar.de logo

Mailinglisten-Archive

[php] Regex-Unterstützung gesucht

[php] Regex-Unterstützung gesucht

Yannik Hampe yannik at cipher-code.de
Fre Aug 17 17:06:44 CEST 2007



Jens Schmidt wrote:
 > Moin liebe Gemeinde,
 >
 > ich baue gerade eine Klasse zum Parsen von Texten. Sinn der Übung ist 
das automatisierte Versehen unterschiedlicher Texte mit Links. Die 
Funktion läuft vereinfacht gesagt so:
 >
 > - Objekt bekommt zu parsenden Text und Array mit einer Anzahl von 
Keywords
 > - Wenn Keywords im Text vorkommen, wird per preg_split der Text an 
der Stelle auseinandergenommen, das entspr. Keyword mit nötigem Tag 
versehen, das ganze wieder zusammengesetzt und zurückgegeben.

preg_split?? Wieso nicht einfach str_replace?
 >
 > Der Ausdruck, mit dem der Text bislang auseinandergenommen wird ist:
 >
 > '/[\s]+'.$val.'([\s[:punct:]])/'
 >
 > wobei $val natürlich eines der Keywords aus dem übergebenen Array 
ist. Es wird also nur nach ganzen Wörtern gesucht. Das ganze haut soweit 
auch ganz gut hin, ist bis hierhin auch nicht weiter aufregend,
 >
 > ABER(!):
 >
 > Da der zu parsende Text auch HTML enthalten kann (eigentlich der 
Normalfall hier), muss nach oben beschriebenem Vorgehen das Splitten 
dort verhindert werden, wo $val Teil eines Tags ist (z.B. <hn></hn>, 
<a...></a>, <img...>, <input...>) verhindert werden.
 > Jetzt sitz ich schon geraume Zeit hier, grübel über einer möglichen 
Ergänzung des o.g. Ausdrucks nach, der mir meinen Text eben nur dann 
teilt, wenn $val eben nicht zu einem solchen Tag gehört, komme da aber 
nicht weiter... :( Gibts einen solchen Ausdruck überhaupt?

Du könntest das mit einer Lookbehind-Assertions machen:
(?<!<[^>]*)KEYWORD
oder mit einer Lookahead-Assertion:
KEYWORD(?![^<]*>)
Ich glaube php kann keine Lookbehind Assertions, aber probier es mal aus 
:-) .
 >
 > Wenn einer der Wissenden in dieser Runde mir da unter die Arme 
greifen könnte, wäre ich echt dankbar!
 >
 >
 > Gruß, jens.

Yannik


php::bar PHP Wiki   -   Listenarchive