RegEx (again... :) )

boast

Mitglied
So hallo erstmal!

Hab folgendes kleines Problem mit meinem RegEx: Er macht nicht was er will ;).

Hab ihn schon mehrmals vereinfacht und auseinander genommen, aber ich komm net drauf, wo der Fehler liegt.

(geht um HTML matchen, die Variable $tag soll ein gültiger Tag sein):
Code:
/<(\/?)(\$tag)((\s+(class|href|title|rel|rev)+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)(\/?)>/

Also, mal Zeile um Zeile...:

Anfang (/) sowie das HTML maskierte <:
Code:
/&lt;
Evt. kann der Tag ja auch ein EndTag-Slash haben:
Code:
(\/?)
Der eigentliche Tag (wird mit foreach($allowedTags as $tag) eingefügt):
Code:
(\$tag)
Die Attribute:
Code:
((\s+(class|href|title|rel|rev)+(\s*=\s*(?:\".*?\"|'.*?'|[^'\"&gt;\s]+))?)+\s*|\s*)
Wobei space + gültiges Attribut...
Code:
\s+(class|href|title|rel|rev)
...space + = + verschiedene Arten wie man Attribute angeben kann (', ", ohne maskiertes >)...
Code:
(\s*=\s*(?:\".*?\"|'.*?'|[^'\"&gt;\s]+))
...oder kein Attribut:
Code:
|\s*
Wieder Variable End-Tag (z.B. bei img-Tag) sowie das Maskierte >:
Code:
(\/?)&gt;/

Wäre sehr dankbar, wenn mir da jemand helfen könnte...
 
Ehrlich gesagt verstehe ich immer noch nicht, was du wie ersetzen/finden willst.

Hast nicht ein einfaches Beispiel vom Quell-String in dem gesucht wird?
 
Probier mal Folgendes:
PHP:
'@&lt;(?:/'.$tag.'|'.$tag.'(?:\s+(?:class|href|title|rel|rev)\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^>\s]+))*)&gt;@s'
 
Ich suche HTML - Tags, welche aber < > "maskiert", d.h. mit &lt; bzw. &gt; ersetzt wurden.

Gematch wird so einiges:
Code:
<tag>
<tag/>
</tag>
<tag atr=atr>
<tag atr='atr'>
<tag atr="atr">
<tag atr="atr>">

Hab den Fehler gefunden, die Variable $tag muss gar nicht escaped werden... o_O

Edit: Danke Gumbo, auch ne Lösung, aber sehe ich das richtig, dass Tags wie <img ... /> nicht gematcht werden, wegen dem Slash am Ende?!
PS: benütze das ganze in Kombination mit der "tidy" Extension, damit versuche ich auch die Seiten mit User-Eingaben mit dem Content-Type "xml" auszugeben... :)
 
Zuletzt bearbeitet:
Zurück