zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Reguläre Ausdrücke & preg_replace

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 07.10.2009, 14:52
Benutzerbild von Unsk1ll3d
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.01.2006
Beiträge: 206
Unsk1ll3d befindet sich auf einem aufstrebenden Ast
Standard Reguläre Ausdrücke & preg_replace

Moin allerseits,

leider habe ich ein Problem, bei dem ich nicht mehr weiter weiß.
Es handelt sich um preg_replace und Reguläre Ausdrücke, die als Beispiel wie folgt aussehen können:

PHP-Code:
<?php
$string 
"
[div#example]tada[div#test]asd[/div]tede[/div]"
;
$replace "<div id=\"\\2\">\\3</div>";

$pattern "~(\[div#([A-Za-z]+)\](.*)\[/div\])~im";
echo 
preg_replace($pattern,$replace,$string);

$pattern "~(\[div#(.*)\](.*)\[/div\])~Uim";
echo 
"\n\n".preg_replace($pattern,$replace,$string);

$pattern "~(\[div#([A-Za-z0-9]+)\](.*)\[/div\])~im";
echo 
"\n\n".preg_replace($pattern,$replace,$string);
?>
Das Beispiel oben gibt folgendes zurück:
HTML-Code:
<div id="example">tada[div#test]asd[/div]tede</div>


<div id="example">tada[div#test]asd</div>tede[/div]


<div id="example">tada[div#test]asd[/div]tede</div>
Wie man bemerkt, bewirkt U (ungierig), dass das erste
Code:
[/div]
für den Ausdruck passt und verwendet wird. Wenn das ganze nur case-insensitive (i) und auf mehrere Zeilen (m) verwendet wird, wird der letzte schließende Tag genutzt.

Problem bei der Sache ist, dass mit diesem Ausdruck nicht
Code:
[div#test]...[/div]
ersetzt wird, weil eben
Code:
(.*)
auf den Rest zutrifft. Andererseits, wenn ich die einzelnen Zeichen erlaube (Beispiel3) funzt das auch nicht.

Ich bräuchte wahrscheinlich (Vermutung) eine Nicht-Erlaubnis via ^ - leider habe ich keinen Plan, wie ich das in diesem Beispiel anwenden kann.

Hat jemand von euch eine Idee?

Freundliche Grüße,
Unsk1ll3d
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 07.10.2009, 19:45
Benutzerbild von Pr0g
(^.^)
XHTMLforum-Mitglied
 
Registriert seit: 23.08.2005
Ort: Düsseldorf
Beiträge: 535
Pr0g wird schon bald berühmt werden
Standard

Was du machen willst könnte mit regulären Ausrücken schwierig werden.

Versuch mal das Ganze in eine Schleife zu packen, die so lange läuft, bis keine Div-Blöcke mehr vorhanden sind. In der Schleife dann jeweils den ersten und letzten ersetzen. Irgendwann ist der Text dann durchgearbeitet bis zur Mitte und alle wurden ersetzt.

Ich hatte ein ähnliches Problem mal mit BBCodes und deren Verschachtelungen. Habs dann so gelöst, dass ich von regulären Ausdrücken weg bin und einen richtigen Parser für den Text geschrieben habe^^
__________________

Geändert von Pr0g (07.10.2009 um 19:50 Uhr)
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 07.10.2009, 21:04
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.735
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Ersetzungsalgorithmen fangen immer dort nach einer nächsten Übereinstimmung zu suchen, wo die vorherige endete. Denn anderenfalls würde so etwas wie str_replace('foo', 'foo', 'foo') zu einer Endlosschleife führen.

Da sich aber reguläre Ausdrücke sowieso nicht zum Verarbeiten von einer nicht-regulären Sprache wie HTML eignet, ist ein Parser sinnvoller, der sich die einzelnen öffnenden und schließenden Tags merkt und zusammengehörige Paare erkennt. Damit kannst du dann sogar Syntaxfehler aufspüren und gegebenenfalls korrigieren.
__________________
Markus Wulftange
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Reguläre Ausdrücke - entfernen von <br /> hinter html-Tags Praktikant Serveradministration und serverseitige Scripte 7 15.12.2009 00:24
gibt es so was wie ausdrücke? lomtas CSS 3 22.03.2005 19:38
301 mit htaccess - Fragen /reguläre Ausdrücke? andir Serveradministration und serverseitige Scripte 1 21.12.2004 02:38


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:25 Uhr.