Hi,
ich bin noch ziemlich neu in Sachen regulärer Ausdrücke..
Ich möchte im Moment gerade <br />-Tags löschen, die in (Pseudo)Tables vorkommen.
Am einfachsten ist es wohl anhand eines Beispiels zu erklären:
Ich habe einen Sting, der z.B. so aussieht:
[tr]<br />[td]blub<br />[/td][td]<br />bl<br />a<br />[/td][/tr][tr][td]blubb[/td][td]blaa[/td][/tr]
Dieser Code wird Später mal in richtiges HTML umgewandelt, bei dem innerhalb eines tr-Elements ja keine br-Elemente erlaubt sind. Deswegen möchte ich diese entfernen.
Der Quellstring kann auch mal so aussehen:
<br />[tr] <br /><br /><br />[td]blub<br />[/td][td] <br />bl<br />a<br /> [/td][/tr][tr][td]blubb[/td][td]blaa[/td][/tr]
Also mehrere br-Elemente hintereinander.
Die br-Elemente innerhalb der td-Elemente, die nicht direkt nach dem Start-Tag oder vor dem End-Tag sitzen (abgesehen von whitespace), sollen beibehalten werden.
Dafür habe ich mir jetzt volgende pattern überlegt, die soweit auch funktionieren. Ich musste allerdings zwei benutzen:
$content = preg_replace ('=(\[/*t(r|d)\])\s*(<br />)+=Uis', '$1' , $content);
$content = preg_replace ('=(<br />)+\s*?(\[/*t(r|d)\])=Uis', '$2' , $content);
Das Ergebnis der beiden Beispiele würde dann so aussehen:
[tr][td]blub[/td][td]bl<br>a[/td][/tr][tr][td]blubb[/td][td]blaa[/td][/tr]
Kann man das noch vereinfachen?
Gruß