[php]preg_replace

Bububoomt

ohne Vertrauen
ID: 10361
L
28 April 2006
19.666
769
Kennt wer ne gute Seite die preg_replace auf deutsch erklärt?

versuche gerade folgendes

HTML:
<li onclick="loadcontent(3,15)">Chinarestaurant Ni Hau 2</li>

in folgendes zu ändern:

HTML:
<li><a href="index_15.html">Chinarestaurant Ni Hau 2</a></li>

wobei sowas mehrfach vorkommen kann. im <li> könnte natürlich auch noch mehr vorkommen, was übernommen werden soll. z.b. class="xx"
 
du musst dafür eigentlich nur Reguläre Ausdrücke (RegExp) verstehen, wenn du genauere Spezifikationen hinterlässt, kann man dir auch unter die Arme greifen.
 
also das onclick soll verschwinden und statt desen soll um den text ein link, wobei der link index_zahl.html lautet, die Zahl also nach dem _ und vor dem .html kommt durch die zweite zahl aus dem onclick, die erste zahl ist irrelevant.


noch ein beispiel:

HTML:
<li class="link" onclick="loadcontent(3,zweitezahl)">Chinarestaurant Ni Hau 2</li>

HTML:
<li class="link"><a href="index_zewitezahl.html">Chinarestaurant Ni Hau 2</a></li>

 
Auf Deutsch gibts einige Seiten. z.B. wikipedia, oder google suchen
Hier ein link auf die schnelle von wikipedia mit übungen.
https://www.regenechsen.de/phpwcms/index.php?regex_allg

Ich hab mal eben folgendes erstellt:
PHP:
<?php
$search = '<li class="test" onclick="loadcontent(3,15)" style="display:block;">Chinarestaurant Ni Hau 2</li>';

$pattern = '/<li([^>]*)\sonclick="loadcontent\(\d++,(\d++)\)\"([^>]*)>([^<]*)<\/li>/i';
$replace = '<li \\1 \\3><a href="index_\\2.html">\\4</a></li>';

var_dump(preg_replace($pattern, $replace, $search));

// Ergebnis:
// string(99) "<li  class="test"  style="display:block;"><a href="index_15.html">Chinarestaurant Ni Hau 2</a></li>"

?>

So könnte das funktioneren.
 
Danke dir, funktioniert auch soweit super, nur ein kleines Problem gibt es wenn in der zeile z.b. ein
HTML:
<br>
vorhanden ist, also z.b.

HTML:
<li class="link" onclick="loadcontent(3,zweitezahl)">Chinarestaurant Ni<br> 
Hau 2</li>
 
Zuletzt bearbeitet:
PHP:
$pattern = '/<li([^>]*)\sonclick="loadcontent\(\d++,(\d++)\)\"([^>]*)>(.*?)<\/li>/im';
das funktioniert nun auch mit dem br, aber nciht wenn da auch ein zeilenumbruch drin ist, klappt also nur wenns komplett in einer Zeile ist.

edit, also bei \ims gehts, kanns mir wer vertändlich erklären, was das genau bedeutet?
 
https://reeg.junetz.de/DSP/node17.html#tab:PCRE-Optionen da stehen alle aufgelistet mit Erklärungen:

i: Groß und KLeinschreibung sind egal
m: Eigentlich ist ein string eine Zeile. Dann würde "^" nur auf den Anfang passen. m sieht Zeilenumbrüche auch als Neue Zeile an... (Also verschiedene Zeilen in einem String werden auch als einzelne Zeilen behandelt.
s: "." kann auch ein Zeilenumbruch "\n" sein