PHP: ersetzungsproblem
BiG_WEaSeL 04.11.2006 - 11:04 896 6
BiG_WEaSeL
Super Moderator-
|
folgendes, ich lese aus einer datenbank wörter aus (pro row 1) die durch etwas anderes ersetzt werden sollen.
da es sich um eine webseite handelt sie der zu durchsuchende text z.b. so aus:
"blablabal mein name ist <a href="http://www.overclockers.at/bigweasel.txt">bigweasel</a> ausserdem kenn ich noch ein paar andere leute wie zum beispiel den <a href="http://www.overclockers.at/xyz.txt">xyz</a>"
was möchte ich machen?
ich hatte vor mit preg_replace z.b. die wörter bigweasel und yxz zu ersetzen, allerdings dürfen die wörter natürlich nicht in der url geändert werden, also sollen sie nachher z.b. so aussehen: <a href="http://www.overclockers.at/bigweasel.txt">bigweasel_ersetzt</a>
alles klar was ich meine? ich bring es einfach nicht zustande per regexp, andere möglichkeiten fallen mir keine ein.
(sollte auch halbwegs performant sein, da pro webseite ein paar hundert mal (so viele wörter werden überprüft ob sie vorhanden sind und ersetzt werden sollen) ausgeführt)
|
Medice
Intensivlaie
|
du könntest nach ">bigweasel<" suchen - das betrifft dann nicht den .txt bereich.
|
BiG_WEaSeL
Super Moderator-
|
die wörter kommen auch im "normalen" text vor.
mal ein beispiel wie es ungefähr aussieht:
"overclockers.at wird mit vbulletin betrieben, hier finden sie mehr über <a href="http://www.vbulletin.com">vbulletin</a>"
und jetzt hätte ich gerne vbulletin ersetzt, natürlich nicht innerhalb des links.
also insgesamt allgemein nicht innerhalb von tags.
|
ica
hmm
|
öhm, was jetzt. im oberen beispiel solls im link ersetzt werden im unteren eben nicht. was sind die kriterien?
|
COLOSSUS
AdministratorGNUltra
|
`sed -r` tut damit: "s/(>[^<>]*)SUCHSTRING([^<>]*)</\1ERSATZSTRING\2/", zumindest in meinem (etwas limitierten ) Trivialtestszenario. Sollte moeglich sein, das auch in preg_match-Syntax zu notieren
|
BiG_WEaSeL
Super Moderator-
|
öhm, was jetzt. im oberen beispiel solls im link ersetzt werden im unteren eben nicht. was sind die kriterien? sorry wenn es missverständlich rüberkam, gemeint ist es so: aus: "overclockers.at wird mit vbulletin betrieben, hier finden sie mehr über <a href="http://www.vbulletin.com">vbulletin</a>" soll "overclockers.at wird mit vbulletin_ersetzt betrieben, hier finden sie mehr über <a href="http://www.vbulletin.com">vbulletin_ersetzt</a>" werden.
|
Luzandro
OC Addicted
|
<?php
$input = 'overclockers.at wird mit vbulletin betrieben, hier finden sie mehr über <a href="http://www.vbulletin.com">vbulletin</a>';
$search = 'vbulletin';
$subst = 'vbulletin_ersetzt';
echo preg_replace("/<[^>]*>|$search/e", '"\\0" == "$search" ? "$subst" : "\\0"', $input);
?>
|