[preg_replace] So ganz verstehe ich das PHP-Handbuch nicht

Alles, was PHP betrifft, kann hier besprochen werden.

[preg_replace] So ganz verstehe ich das PHP-Handbuch nicht

Postby ClausVB » 22. June 2003 18:28

Ich habe die CHM Version des PHP-Handbuchs.

Ich habe erfolgreich dieses Beispiel im IPB lokalisiert und weiß auch, was es tut:

Code: Select all
$txt = preg_replace( "#\[b\](.+?)\[/b\]#is", "<b>\\1</b>", $txt );

Das sucht nach Text zwischen "[b]" und "[/b]" und ersetzt dann den BB-Code durch die HTML-Tags "<b> </b>".


Mein Problem: Ich verstehe #, (.+?), #is und \\1 nicht so richtig.

Ich habe ein bißchen im Handbuch gesucht, aber es sind immer nur einige wenige Beispiele angegeben, nicht wofür das ganz steht.

Mein Ziel: Ich hoffe mit diesem Befehl das
MID=1
aus folgendem Ausdruck zu holen
/index.php?s=&act=Profile&CODE=03&MID=1'>NeoBlade - ClausVB</a></span>
wobei die 1 variabel ist (Member ID).

Hat da jemand vielleicht einen Ansatz oder kann mir die Seite im PHP-Handbuch sagen, die solche Sachen genau erklärt?
User avatar
ClausVB
 
Posts: 32
Joined: 12. June 2003 10:46
Location: NRW - Germany

Postby Oswald » 23. June 2003 10:06

Huhu ClausVB,

Du benutzt in Deinen Beispiel Perl-Regular-Expression und die kenn ich leider nicht. Ich hab daher mal Dein Problem mit "normaqlen" regular expressions gelöst:

Code: Select all
<?

$string="/index.php?s=&act=Profile&CODE=03&MID=1'>NeoBlade - ClausVB</a></span>";

$mid=ereg_replace( ".*(MID=[0-9]+).*", "\\1", $string );

echo $mid;

?>


Die Bedeutung ist etwa folgende: die ( ) umschliessen einen bestimmten Bereich und auf diesen Bereich referenziert das \\1. Ein paar kleine Beispiele:

erep_replace("A(.)C","\\1","ABC") würde ein B ergeben.
erep_replace("A(.)C","\\1","123ABC") würde 123B ergeben.
erep_replace("(.)(.)(.)","\\3\\2\\1","ABC") würde CBA ergeben.

Ich hab die Beispiele nicht ausprobiert. Sie müssten aber so funktionieren und sind - glaub ich - auch gute Beispiele um das Prinzip zu verstehen.

Bei Fragen: Fragen! ;)

Gruß,
Oswald
User avatar
Oswald
Apache Friends
 
Posts: 2718
Joined: 26. December 2002 19:51
Location: Berlin, Germany
Operating System: Linux

Re: [preg_replace] So ganz verstehe ich das PHP-Handbuch nic

Postby boppy » 23. June 2003 14:55

ClausVB wrote:Mein Ziel: Ich hoffe mit diesem Befehl das
MID=1
aus folgendem Ausdruck zu holen
/index.php?s=&act=Profile&CODE=03&MID=1'>NeoBlade - ClausVB</a></span>
wobei die 1 variabel ist (Member ID).
Warum denn dann so eine unglaubliche Rechenarbeit (*übertreib*) - wie wäre es einfach mit $_GET["MID"]???
...in diesem Sinne
yours boppy

Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
User avatar
boppy
AF Moderator
 
Posts: 501
Joined: 27. December 2002 02:15
Location: W-E-City

Re: [preg_replace] So ganz verstehe ich das PHP-Handbuch nic

Postby ClausVB » 24. June 2003 10:45

boppy wrote:unglaubliche Rechenarbeit (*übertreib*) - wie wäre es einfach mit $_GET["MID"]???

Das würde ich machen, wenn MID per URL übegeben würde ...

Wird es aber nicht.

Der dargestellte Ausdruck wird so zusammengebastelt einer Funktion übergeben. NACHDEM die Funktion abgearbeitet ist, wird der Link im Forum dargestellt. Ich muss aber schon IN der Funktion etwas mit MID machen.

Für mich gab es jetzt zwei Möglichkeiten: Der Funktion zusätzlich die MID übergeben (dazu müsste ich rausfinden, wo die Funktion aufgerufen wird) und ich müsste einen GLOBAL Variable deklarieren um nicht alle Funktionsaufrufe zu ändern.

Da habe ich mich lieber für die ereg_replace Variante entschieden.

@Oswald: Ich verstehe noch nicht so ganz, warum Deine Beispiele das so und so machen. Beispiel: Warum gibt
erep_replace("A(.)C","\\1","123ABC") => 123B
aus und nicht nur
B?

Ich teste die Beispiele mal und lese die Doku. Meine Erkenntnisse werde ich dann posten. Vielen Dank erstmal für Deine Hilfe Oswald.
User avatar
ClausVB
 
Posts: 32
Joined: 12. June 2003 10:46
Location: NRW - Germany

Re: [preg_replace] So ganz verstehe ich das PHP-Handbuch nic

Postby Oswald » 24. June 2003 12:20

ClausVB wrote:@Oswald: Ich verstehe noch nicht so ganz, warum Deine Beispiele das so und so machen. Beispiel: Warum gibt
erep_replace("A(.)C","\\1","123ABC") => 123B
aus und nicht nur B?


Weil der Ausdruck "A(.)C" nur auf das "ABC" aus dem "123ABC" zutrifft. Daher wird nur das "ABC" durch "\\1" ersetzt und nicht das "123".

Lieben Gruß,
Oswald
User avatar
Oswald
Apache Friends
 
Posts: 2718
Joined: 26. December 2002 19:51
Location: Berlin, Germany
Operating System: Linux

Postby ClausVB » 26. June 2003 08:38

Ich habe mir jetzt mal bei selfHTML die Doku zu den regulären Ausdrücken ausgedruckt und werde jetzt ein bißchen Grundlagenforschung betreiben.

Wenn ich irgendetwas nicht hinkriege oder verstehe, werde ich hier noch mal nachfragen.

Danke für Deine bisherige Hilfe.
User avatar
ClausVB
 
Posts: 32
Joined: 12. June 2003 10:46
Location: NRW - Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 10 guests