Mailinglisten-Archive |
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