Teile von einem Satz ändern mit preg_replace

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?
[/php]
MfG, matibaski

[PHP]

<?PHP $satz = preg_replace("#(.*)x(.+)$#is","$1e$2",$satz); ?>

[/PHP]

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:

(.*)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

$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

hm naja bin halt auch net so der pro in regexp. Aber immerhin funktioniert es :wink:

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 :smiley:

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 www.google.de bla bla bla“;
$pattern = „%[url](.*)[/url]%isU“;
$replace = „<a href="http://($1)">($1)“;
$string = preg_replace($pattern,$replace,$string);
echo $string;
[/PHP]

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? :smiley:
ISt ja logisch denk ich.

Danke auf jeden fall.

MfG, matibaski