"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP: ersetzungsproblem

BiG_WEaSeL 04.11.2006 - 11:04 896 6
Posts

BiG_WEaSeL

Super Moderator
-
Avatar
Registered: Jun 2000
Location: Wien
Posts: 8279
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
Avatar
Registered: Mar 2003
Location: irc.euirc.net - ..
Posts: 1967
du könntest nach ">bigweasel<" suchen - das betrifft dann nicht den .txt bereich.

BiG_WEaSeL

Super Moderator
-
Avatar
Registered: Jun 2000
Location: Wien
Posts: 8279
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
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
öhm, was jetzt. im oberen beispiel solls im link ersetzt werden im unteren eben nicht. was sind die kriterien?

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
`sed -r` tut damit: "s/(>[^<>]*)SUCHSTRING([^<>]*)</\1ERSATZSTRING\2/", zumindest in meinem (etwas limitierten :D) Trivialtestszenario.

Sollte moeglich sein, das auch in preg_match-Syntax zu notieren ;)

BiG_WEaSeL

Super Moderator
-
Avatar
Registered: Jun 2000
Location: Wien
Posts: 8279
Zitat von iCA-
ö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
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
Code: PHP
<?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);
?>
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz