(Hallo|Hi(ho)|Tag|Mahlzeit|Yo, Yo{2,3}) Pit Stop,
Ich habe einen Link, den ich ändern möchte/muß.
Dieser Link wird dynamisch generiert, daher die ID in dem Link.
Was willst du denn ändern: das id-Attribut oder bspw. das Linkziel (href-Attribut)?
Über str_replace komme ich dasher ja nicht weiter, weil ich ja keine feste Zeichenkette habe, sondern eine "wechselnde";-)
Klar kann dir da preg_replace() weiterhelfen. Nur wenn du damit noch nie zu tun hattest, dann musst du dich wohl oder übel in die Thematik [(Perl-kompatible) Reguläre Ausdrücke](file://localhost/e:/data/info-rsrc/webdev/php/php.net/www.php.net/manual/de/regexp.reference.php) einlesen ...
Für das Beispiel weiter unten brauchst mindestens Kenntnisse
- zu Zeichenklassen generell "[...]"
- zu "negierten" Zeichenklassen "[^...]"
- zur Zeichenklasse "\s"
- zu den Quantifikatoren ("Zählern") "+" und "*"
- zu Subpatterns "(...)"
und zu allem, was ich jetzt möglicherweise übersehen habe- ;-)
zu 3.) wie soll ich die ID ala Parameter übergeben?
Für den Fall, dass du die URL im href-Attribut (das auf das id-Attribut folgt) ersetzen möchtest, etwa so:
function meine_ersetzungsfunktion(
$id, /// deine ID
$womit_ersetzen, /// die neue URL
$worin_ersetzen /// dein HTML-Quelltext
) {
// prüfung übergebener Werte auf Sinnhaftigkeit
...
// $womit_ersetzen muss "escaped" werden, falls $ oder \ drin vorkommen
...
return preg_replace(
'/(\s+id="'.preg_quote($id).'"\s+href=")[^"]*(")/',
'$1' . $womit_ersetzen . '$2',
$worin_ersetzen);
}
Das funktioniert aber nur dann wie gewünscht, wenn die ID nur einmal so im (HTML?-)Quelltext vorhanden ist. Das sollte zwar in validem HTML so sein, aber man weiß ja nie ... ;-) Probeweise kannst du dir das mit preg_match_all() bestätigen lassen:
if (preg_match_all('/\s+id="'.preg_quote($id).'"/', $wo_ersetzen, $treffer)) {
var_dump($treffer);
}
... oder in HTML:
if (preg_match_all('/\s+id="'.preg_quote($id).'"/', $wo_ersetzen, $treffer)) {
ob_start();
var_dump($treffer);
printf('<pre>%s</pre>', htmlspecialchars(ob_get_clean()));
}
MffG
EisFuX