ich weiß gar nicht was dein FOR und IF alles soll...mach ein
preg_replace
mit Array als Pattern und Replace und lass das drüber laufen, wie (fast) jeder andere auch...ist die einfachste Möglichkeit
problem mit preg_replace
Einklappen
X
-
*push*
sorry aber muss das heut noch lösen.
weiß jetzt nicht, ob man das über reguläre ausdrücke überhaupt in prag_replace lösen kann. wenn nicht, wäre ich für andere vorschläge natürlich auch sehr dankbar.
gruß
wolle
Einen Kommentar schreiben:
-
ok ich bin bei der fehlersuche einen schritt weitergekommen.
das problem ist, dass preg_match() nur suchmuster im stringformat akzeptiert und preg_replace() mixed.
deswegen ist es in meiner script auch total idiotisch, preg_replace() durch eine schleife laufen zu lassen.
muss meine frage umformulieren:
ich will jetzt im ersetze array einfach per reguläre ausdrücke dem programm sagen, dass da wo jetzt $matches[] steht der inhalt von (.*?) aus $suche hin soll.
weiß jetzt nicht inwiefern das zu realisieren ist.
meine kenntnisse in regulären ausdrücken sind auch nur sehr beschränkt, deswegen wäre hier professionelle hilfe sehr gut
gruß
wolle
Einen Kommentar schreiben:
-
problem mit preg_replace
hallo,
hab mir ein script geschrieben, was bestimmte suchmuster in einem string umwandeln soll. als bsp: [ url ]www.test.de[ /url ] (ohne leerzeichen)in einen richtigen html link umwandeln. geht auch sehr gut.
das problem ist ejtzt aber, dass es nicht mehr korrekt angezeigt wird, sobald er mehrere suchmuster in einem string findet.
hier erstmal der code:
so angenommen in $cont würde "[ b ]fett[ /b ][ em ]kursiv[/ em ]" (ohne leerzeichen) stehen, gibt er mir folgendes aus:PHP-Code:<?
// $cont = eingangsstring
$text=0;
$suche = array('!\[url\](.*?)\[/url\]!i',
'!\[url=(.*?)\](.*?)\[/url\]!i',
'!\[b \](.*?)\[/b\]!i',
'!\[em \](.*?)\[/em\]!i', //ohne leerzeichen
'!\[u \](.*?)\[/u\]!i',
'!\[strike \](.*?)\[/strike\]!i',
'!\[email \](.*?)\[/email\]!i',
'!\[email = (.*?)\](.*?)\[/email\]!i');
for($s=0; ;$s++) { // finde arrayende von $suche
if(!$suche[$s]) {
break;
}
}
for($i=0;$i<=$s;$i++) { // so lange, wie $i nicht größer als das arrayende von $suche
$match = @preg_match($suche[$i],$cont,$matches);
if($match) {
$ersetze = array('<b><a class="red" href="'.$matches[1].'" target="_blank">'.$matches[1].'</a></b>',
'<b><a class="red" href="'.$matches[2].'" target="_blank">'.$matches[1].'</a></b>',
'<b>'.$matches[1].'</b>',
'<em>'.$matches[1].'</em>',
'<u>'.$matches[1].'</u>',
'<strike>'.$matches[1].'</strike>',
'<b><a class="red" href="mailto:'.$matches[1].'">'.$matches[1].'</a></b>',
'<b><a class="red" href="mailto:'.$matches[2].'">'.$matches[1].'</a></b>');
$text = @preg_replace($suche,$ersetze,$cont);
}
}
if(!$text) {
$text = $cont;
}
// $text = ausgabestring
?>
er nimmt sich also den eil zwischen den tags des ersten ergebnisses.Code:[b]fett[/b][I]fett[/I]
ich such jetzt schon den halben tag nach dem fehler, komme aber keinen meter weiter weil mir mein script total logisch erscheint und ich mir net vorstellen kann, wo der fehler liegt.
gruß
wolleZuletzt geändert von wolle85; 12.12.2005, 23:53.Stichworte: -
Einen Kommentar schreiben: