• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Teile von einem Satz ändern mit preg_replace

  • Ersteller Ersteller matibaski
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
M

matibaski

Guest
Moin!
Es kommt mal die Zeit, in der man einige Teile eines Satzes ersetzen muss. (Für mein Gbook).

Nun möchte ich Seite umwandeln in einen HTML Link.

Mit PHP: preg_replace - Manual wurde ich nicht schlau, da es etwas zu kompliziert erklärt ist.

Ich habe Jetzt mal das:
PHP:
$satz = "Hallo wie geht es Herrn Xaver Meixr?";
$satz = preg_replace(); // Wie muss ich es machen, dass das x bei Meixr durch ein e ersetzt wird? 
//Wen ich als Suchmuster x eingebe, dann wird ein anderes 
//Wort auch ein e haben, statt ein x.
//Also ein blödes Beispiel, aber ich habe kein besseres gefunden.
//Wei mache ich das jetzt?
MfG, matibaski
 
Kannst du mir Zeichen für Zeichen erklären, welches Zeichen welche Funktion hat?
Ich kapier das nicht.


MfG, matibaski
 
naja in deinem Satz
Hallo wie geht es Herrn Xaver Meixr
wollen wir das letzte x ersetzen.
Deshalb sieht unser Suchmuster so aus:
Code:
(.*)x(.+)$
(.*) bedeutet beliebige Zeichen -> "." so oft wie möglich "*" zusammengefasst in Gruppe 1 -> das bedeuten die Klammern

( = Anfang Gruppe 1
. = Beliebiges Zeichen
* = so oft wie möglich
) = Ende Gruppe 1

dann haben wir das x das wir Später ersetzen wollen
Jetzt kommt Gruppe 2, + bedeutet hier - so wenig Zeichen wie möglich

( = Anfang Gruppe 2
. = Beliebiges Zeichen
+ = so selten wie möglich
) = Ende Gruppe 2

als letztes gibt es noch das "$" Zeichen.
Es bedeutet, dass hier der String zu ende sein muss.

Da unsere erste Gruppe möglichst viele Zeichen umfasst, wird sie bis zum letzten x gelten, dass ist dann der längste Bereich der hineinpasst. Dann kommt unser x und dann die restlichen zeichen in Gruppe 2

Das ersetzen wir nun
Code:
$1e$2
"$1" ist der Inhalt aus Gruppe 1 dann haben wir ein "e" (Dort hatten wir das x) und dann kommt der Inhalt aus Gruppe 2 "$2"

hoffe du hast es verstanden
 
Hallo,

stimmt fasst alles, nur + bedeutet mindestens 1 mal. Damit wird das x bei "Max" z.B. nicht mehr ersetzt. Wenn du aber den * nimmst, geht es wieder, da der erste * alles bis zum letzten x mitnimmt.


N43
 
Vielen Dank, habe es kapiert.
Nun wenn ich vom Gästebuch die Url übermittle, und zwar so:
[ url ]www.hallo.de[ / url ] // Ohne abstände :D

Wie will dann die Funktion herausfunden, was gepostet wurde?
Beim Beispiel konnte es man wissen, was ersetzt werden musste, jetzt zwar auch, doch es hat was anderes dazwischen.


Ich muss ja iwie sagen, suche von [ bis ], dann den Rest in Ruhe lassen, bis ein [ kommt und dann mit einem ] endet.
Wie mache ich das?
Ich bin zwar mit einfachen Sätzen am ausprobieren, doch ich bringe es mit der URL nicht fertig.

@ Frank:
Bei deiner 1. Antwort sah ich noch 2 # und ein is.
Was hatten die für ne Funktion?


MFG, matibaski
 
die # sind delimeter (beliebiges Zeichen, muss nur am Anfang und Ende das gleich seien und muss im Suchmuster escaped werden), sie begrenzen einfach nur den suchstring, is sind die modifier
i = case insensitive
s = bei \n nicht abbrechen

nun zu deiner [noparse]www.google.de[/noparse]
PHP:
$string = "bla bla bla [url]www.google.de[/url] bla bla bla";
$pattern = "%\[url\](.*)\[\/url]%isU";
$replace = "<a href=\"http://($1)\">($1)</a>";
$string = preg_replace($pattern,$replace,$string);
echo $string;
 
Danke.
Anhand des Codes habe ich das geschnallt.
Wieso hast du oben [ noparse ][ /noparse ]?

War das nur wegen HTML.de, dass der es nicht parst? :D
ISt ja logisch denk ich.

Danke auf jeden fall.



MfG, matibaski
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben