Seite 1 von 2

Wildcard

Verfasst: 25.10.2007 12:56
von kird1
Hallo,

ich möchte einen String ersetzen, einen variablen Teil davon aber übernehmen - ich habe schon ein bissel rumprobiert, aber mit "%" oder "*" funktioniert es nicht, da ich die korrekte Syntax nicht kenne. (und auch beim Suchen über Google nichts gefunden habe, was mir weiterhilft)

Was muß an die Stelle von "(beliebige Zeichenfolge)" ?

Code: Alles auswählen

$message = str_replace('<a href="http://www.meinforum.de/link/link.php?url=http://www.meinforum.de/(beliebige Zeichenfolge)" target="_blank" rel="nofollow">', '<a href="http://www.meinforum.de/(beliebige Zeichenfolge)" target="_blank">', $message);

Danke
kird1

Verfasst: 25.10.2007 13:08
von Helmut
Hallo kird1,

schau dir das mal an, da wird alles gut erklärt http://de2.php.net/preg_replace. Mir hat es damals gut geholfen.

Probiers mal mit (.*?)

Gruß Helmut

Verfasst: 25.10.2007 13:37
von kird1
funktioniert leider nicht - offensichtlich findet er damit gar nicht erst den Suchstring.

Code: Alles auswählen

$message = str_replace(<a href="http://www.meinforum.de/link/link.php?url=http://www.meinforum.de/(.*?)" target="_blank" rel="nofollow">', '<a href="http://www.meinforum.de/(.*?)" target="_blank">', $message);
was könnte ich noch probieren?

Grüße
kird1

Verfasst: 25.10.2007 13:56
von djchrisnet
ich denke mal sie meinte ohne ()

Verfasst: 25.10.2007 14:08
von S2B
kird1 hat geschrieben:funktioniert leider nicht - offensichtlich findet er damit gar nicht erst den Suchstring.
  1. falsche Funktion: str_replace != preg_replace
  2. Handbuch zu regulären Ausdrücken lesen (siehe Link von Helmut bzw. Suchmuster-Syntax)
:wink:

Verfasst: 25.10.2007 14:27
von kird1
Der Link hilft mir nicht - wenn ich verstehen würde, was da steht - bräuchte ich nicht fragen

Gruß
kird1

Verfasst: 25.10.2007 16:57
von S2B
Dann eben so:

Code: Alles auswählen

$string = preg_replace('#<a href="http://url-vorher.de/([^"]+)">#', '<a href="http://url-nachher.de/$1">', $string);
Damit du auch noch was dabei lernst:
  • Die beiden # am Anfang und am Ende des Suchstrings (erster Parameter) begrenzen das Suchmuster.
  • ([^"]+) ist eine Zeichenreihenfolge, die mindestens ein Zeichen lang ist (dafür ist das + zuständig) und kein " enthält ([^"] beschreibt solch eine Zeichenreihenfolge. Eckige Klammern umschließen eine Zeichenklasse, ^ am Anfang einer Zeichenklasse negiert die Zeichenklasse und " ist in diesem Fall das Zeichen, das nicht in der Zeichenklasse vorkommen darf.).
  • Da die Zeichenreihenfolge in Klammern steht, kann sie im Ersetzungsstring (zweiter Parameter) mit $1 (1, weil erste Klammer) angesprochen werden.
Helmuts Vorschlag würde zwar auch funktionieren, allerdings sollte man wenn möglich gierige Quantifiers (also nicht *? oder +?, sondern nur * oder +) verwenden, da diese schneller sind.

Verfasst: 25.10.2007 18:27
von kird1
Danke - ganz besonders auch für den 2ten Teil!
(denn eben dies sind die Grundlagen, die mir fehlen)

Gruß
kird1

Verfasst: 25.10.2007 20:36
von kird1
funktioniert leider nicht - ich hab auch bis jetzt damit herumprobiert, aber leider nichts erreicht.
Wenn ich den Codeschnipsel von Dir (natürlich auf meine URL angepasst) verwende, sind die Postings im Forum komplett verschwunden (egal ob Link darin oder nicht) und es stehen nur noch die Signaturen da. Die Error-Log bringt aber keine Erhellung - es gibt keinen Eintrag dafür.

Das einzige, was funktioniert, ist das hier:

Code: Alles auswählen

$message = str_replace('http://www.meinforum.de/link/link.php?url=http://www.meinforum.de/', 'http://www.meinforum.de/', $message);

aber da fehlt halt die Hälfte........wenn ich Latein hätte, wär ich jetzt damit am Ende ;)

Grüße
kird1

Verfasst: 25.10.2007 21:14
von S2B
Zeig mal deine angepasste Version, bitte.