Mailinglisten-Archive |
Hallo liebe Liste, ich habe mal wieder ein Problem mit einem RegEx Ausdruck. Was mich dabei verwundert ist, dass dieser im RegexCoach problemlot trifft, im PHP Script dann aber nicht mehr. Es geht um folgendes: Ich möchte in einen beliebigen (HTML-)Fließtext Serienfelder einbauen, die dann durch Werte aus der Datenbank ersetzt werden sollen. Dabei mache ich mir die CLASS-Eigenschaft des SPAN Tags zunutze. <span class="my-field--lastname">[Nachname]</span> Über einen regulären Ausdruck möchte ich nun an die Zeichenkette "lastname" heran kommen, damit ich das gesamte SPAN durch ebendiesen ersetzen kann. Im RegexCoach habe ich folgende Pattern: <span[^>]*my-field--([a-z_]*).*</span> Ich suche also nach einer Zeichenkette, die mit <span beginnt, dann beliebig oft kein > hat, dann die Zeichenkette my-field-- aufweist, dann beliebig oft die eine Zeichenkette a-z und den Unterstrich besitzt, danach dann irgendwie weiter geht (eigentlich kommen dort noch style-Einstellungen) und dann irgendwann mal mit </span> endet. Setze ich das Ganze als Pattern in preg_match_all() ein, erhalte ich in der entsprechenden Match-Variabel in erster Ebene des Arrays alle Spans mit den Eigenschaften wie gewünscht, aber in der Untergruppe dann eine leere Zeichenkette. Bei dieser Variante <span[^>]*my-field--([a-z_]+).*</span> also statt [a-z_]* so [a-z_]+ bekomme ich nur den ersten Buchstaben des jeweiligen Feldes. Also hier "l". Was mich wundert, denn ich dachte, dass das + bedeutet, dass mindestens ein oder mehr Zeichen gefunden werden. Mehr wundert mich, dass es mit dem Sternchen gar nicht klappt. Vielleicht habt ihr ja eine Idee? Grüße Tim
php::bar PHP Wiki - Listenarchive