preg_replace - wörter aus array im text verlinken
Roger
- php
moin!
ich versuche krampfhaft mit u.g. script die wörter im text mit einem script + parameter zu verlinken. ich weiss leider nicht weiter. kann mir jemand helfen?
<?
$str = "Flächenstilllegung ist ein Instrument der gemeinschaftlichen Marktordnung (EU) zur Erzeugungsbegrenzung, hauptsächlich für Getreide.";
$terms = array("/Instrument/", "/Marktordnung/", "/Getreide/");
$target = array("1", "2", "3");
echo preg_replace ($terms, "<a href="script.php?cmd=".$target."">".$terms."</a>", $str);
?>
ausgegeben wird das:
"Flächenstilllegung ist ein Array der gemeinschaftlichen Array (EU) zur Erzeugungsbegrenzung, hauptsächlich für Array."
wobei "Array" bereits verlinkt ist...
gruß.
roger.
Hallo Roger,
$terms = array("/Instrument/", "/Marktordnung/", "/Getreide/");
$target = array("1", "2", "3");
Du baust hier 2 Arrays....
"Flächenstilllegung ist ein Array der gemeinschaftlichen Array (EU) zur Erzeugungsbegrenzung, hauptsächlich für Array."
...und wunderst dich hier darueber, dass die beiden vom Typ Array sind?
Du kannst das zB. in einer Schleife machen
for ($i = 0; $i < count($terms); $i++)
{
$str = str_replace ($terms[$i], "<a..." . $target[$i] ... $terms[$i] ....., $str)
}
Gruß,
Dieter
moin!
auf der manual seite scheint es aber auch zu funktionieren:
<?php
$zeichenkette = "Der schnelle braune Fuchs sprang über den faulen Hund.";
$suchmuster[0] = "/schnelle/";
$suchmuster[1] = "/braune/";
$suchmuster[2] = "/Fuchs/";
$ersetzungen[2] = "Bär";
$ersetzungen[1] = "schwarze";
$ersetzungen[0] = "langsame";
echo preg_replace($suchmuster, $ersetzungen, $zeichenkette);
?>
(http://de3.php.net/preg_replace)
wo liegt denn jetzt da der unterschied?
gruß.
roger.
Huhu Roger
wo liegt denn jetzt da der unterschied?
Der Unterschied ist bei den Argumenten im Funktionsaufruf.
Im Manual-Beispiel steht
preg_replace( (array), (array), (string));
in Deinem Beispiel aber
preg_replace ((array), (string), (string));
Viele Grüße
lulu
Hallo Roger,
Der Unterschied liegt darin, dass du Datentypen vermischst, das Beispiel im Manual nicht.
Durch das Concatinieren von '<a href....' . $terms bzw $topics, werden diese als String behandelt und zwar als der String 'Array'.
Gruß,
Dieter
moin!
aso. ok. danke.
dann wohl doch mit ner for-schleife...
gruß.
roger.
moin!
ich bin auf ein weiteres problem gestoßen und mach einfach mal in dem thread hier weiter.
ich suche mittlerweile mit folgendem pattern meinen text ab:
$suchen = "/(".quotemeta($terms['term']).")/";
das klappt auch ganz gut. allerdings möchte ich das ganz gern noch verfeinern. ich möchte, dass der komplette suchausdruck bis zum ersten komma, punkt oder leerzeichen nach dem suchwort gefunden wird. das macht sich ganz gut, wenn nach streuobstwiese gesucht wird und das wort streuobstwiesen dann ohne dem letzten "n" verlinkt wird, weil ja "streuobstwiese" mit drin steckt.
weiß jemand, inwieweit ich den pattern modifizieren müsste?
gruß.
roger.
Huhu roger
das macht sich ganz gut, wenn nach streuobstwiese gesucht wird und das wort streuobstwiesen dann ohne dem letzten "n" verlinkt wird, weil ja "streuobstwiese" mit drin steckt.
soll dann
<a href="wasauchimmer">Streuobstwiese</a>n
oder
<a href="wasauchimmer">Streuobstwiesen</a>
dabei herauskommen?
Oder ist das Problem, dass bei "Streuobstwiese" auch
Streuobstwiesen, Streuobstwiesendünger, Streuobstwiesenfest
gefunden werden sollen?
Viele Grüße
lulu
moin!
letzteres. alles was mit streuobstwiese anfängt.
gruß.
roger.
Hallo Roger
letzteres. alles was mit streuobstwiese anfängt.
Das könnte funktionieren
$suchen = "/\b(".quotemeta($terms['term'])."\w*)\b/";
\b für word-boundary soll dafür sorgen, dass
"Katzenstreuobstwiesen" nicht gefunden wird.
\w* sind beliebig viele (oder gar keines) weitere Zeichen (word character)
Da findest Du genaue Informationen
http://de3.php.net/manual/de/reference.pcre.pattern.syntax.php
Probier es mal aus, ich habe dass jetzt nicht getestet
Viele Grüße
lulu
moin!
ich werd bekloppt!
genial! und das ohne test! n1! funktioniert wie gewollt. :D
allerdings wird jetzt nicht mehr "Roger (Dummbatz)" erkannt. liegt dann wohl sicherlich am \w*, oder?
gruß.
roger.
Huhu Roger
allerdings wird jetzt nicht mehr "Roger (Dummbatz)" erkannt. liegt dann wohl sicherlich am \w*, oder?
Ja, da Whitspace und "()" nicht als Wortzeichen gelten.
Wenn Du soetwas mtchen willst musst Du Dir eine eigene Zeichklasse zusammenstellen.
Also statt
\w*
z.B.
[a-zA-Z0-9()]
Viele Grüße
lulu
moin!
danke!
hast mir schonmal sehr weit geholfen. regexp sind für mich irgendwie wie ein rotes tuch. ich glaub ich belasse das bei dem \w*, weil wenn man da weitermacht ("man könnte..." und "was wäre wenn..."), ich glaub, da kommt man zu keinem ende. das thema scheint ziemlich komplex zu sein.
so wie es jetzt funktioniert, reicht es mir eigentlich auch. da kann ich mit leben, das wortgruppen (mit in klammern gesetzten wörtern) nicht erkannt werden.
gruß.
roger.
hi,
ich werd bekloppt!
viel spaß dabei!!!1
n1!
soll heißen? "none"?
allerdings wird jetzt nicht mehr "Roger (Dummbatz)" erkannt. liegt dann wohl sicherlich am \w*, oder?
nein, das liegt daran, dass in "Roger (Dummbatz)" das wort "streuobstwiese" gar nicht vorkommt :-)
will sagen: bitte konkretes & aktualisiertes beispiel bringen, welcher suchausdruck worauf nicht matcht.
gruß,
wahsaga
moin!
hi,
ich werd bekloppt!
viel spaß dabei!!!1
bli bla blub, ich kack dir in die supp. :)
n1!
soll heißen? "none"?
nice one.
nein, das liegt daran, dass in "Roger (Dummbatz)" das wort "streuobstwiese" gar nicht vorkommt :-)
hehe, wahrscheinlich ;)
gruß.
roger.
hi,
ich werd bekloppt!
viel spaß dabei!!!1
bli bla blub, ich kack dir in die supp. :)
wer hätte gedacht, dass du bei diesem vorhaben derart schnell fortschritte zu vermelden hast :-)
gruß,
wahsaga
moin!
wer hätte gedacht, dass du bei diesem vorhaben derart schnell fortschritte zu vermelden hast :-)
hehe. jaja, wer hätte das gedacht? bei dem einen geht's schnell, bei dem anderen noch schneller :D
gruß.
roger.