PHP Variable für \b in RegEx funktioniert nicht

M

Mr. Snoot

Gast
Hü,

ich möchte gerne in meinem Suchscript prüfen, ob nur ganze Wörter entsprechend dem Suchbegriff angezeigt werden sollen oder nicht.

Dazu gibts ja in den regulären Ausdrücken \b. Wenn ich \b direkt in den regulären Ausdruck schreibe, funktioniert es korrekt. Ich will das \b aber logischerweise nur dann, wenn der Besucher die Option auch ausgewählt hat. Ob das der Fall ist, les ich einfach aus der Such-URL aus und speichere es in einer Varaiblen $pref, die ich dann im regulären Ausdruck statt \b einfüge.

Aber mit der Variablen funktioniert das ganze nicht mehr, hier mal der Code:
PHP:
if(isset($_GET['exp_full']) && $_GET['exp_full'] == "yes")
{
  $pref = "\b";
}

$einlesen = preg_replace("/$pref((<[^>]*)|$search_str)$pref/e$capit", '"\2"=="\1"? "\1":"<a class=\"anker\" name=\"hit\">\1</a>"', $einlesen);
Wenn ich mir $pref mit echo ausgeben lasse, ist auf jeden Fall das \b korrekt übergeben worden, nur im regulären Ausdruck fehlt es (wenn ich diesen mit echo ausgeben lasse).

Komisch ist allerdings, dass dieses $capit was noch im Code vorkommt für die Unterscheidung von Groß- und Kleischreibung ist, also auch wahlweise gesetzt wird: i. Das wird mir im echo "/$pref((<[^>]*)|$search_str)$pref/e$capit" auch nicht angezeigt - aber funktionieren tut das kurioserweise trotzdem!?


Eigentlich hab ich das mit den Variablen $pref und $cap aus einem anderen Beispiel (nicht von mir) übernommen, wo das funktioniert wie gewünscht. Muss ich mit den Variablen irgendwas beachten?
 
Kommt auch nichts an :(

Aber so vom Prinzip müsste das doch klappen, oder? Das Beispiel, von dem ich das abgekupfert habe, sieht so aus:
PHP:
preg_replace("=$pref($search_word)$pref=$capit", ...
Und meine Variante:
PHP:
preg_replace("/$pref((<[^>]*)|$search_str)$pref/e$capit", ...
 
dann mach es doch mal so wie in dem Beispiel, also anstatt "/$pref" "=$pref" nehmen und aus dem /e ein = machen.
 
= und / sind ja nur Begrenzungszeichen und den Modifier e braucht's für das zweite Argument.

Spielt auf jeden Fall leider keine Rolle, ob = oder / :(
 
Versuch mal das hier:
PHP:
$einlesen = preg_replace("/".$pref."((<[^>]*)|$search_str)$pref/e$capit", '"\2"=="\1"? "\1":"<a class=\"anker\" name=\"hit\">\1</a>"', $einlesen);

Bei mir kam der Interpreter vor kurzem bei einer ähnlichen Situation auch durcheinander und hat dann escaped wo er nicht escapen soll.
 
Zuletzt bearbeitet:
Oh mein Gott, hab den Fehler gefunden ...

Es wäre vielleicht sinnvoll, die zu verwendenden Variablen im Funktionskopf auch mit aufzurufen :freak:

Danke für die Hilfe :)
 
Zurück
Oben