/^(.*?)(Anfänger|Schussel)\?(.*)$/im: preg_replace | preg_match

Beitrag lesen

Hallo zusammen,

ich versuche mich ein wenig an RegExps und finde das es mit ein wenig Umsicht auch ganz gut gelingt passende strings für 'Treffer' zu basteln.

Aber bei der momentanen Problematik kenne ich eigentlich nur die Teile in denen ich _keine_ Ersetzungen vornehmen möchte.

Gibt es dafür auch eine elegante Lösung?

Hm, ich versuche mal ein Beispiel:

Die Zeichenkette kann bestehen aus (fast) allen möglichen Zeichen, (Usereingabe!) die innerhalb von normalen HTML-Tags wie <p> <h[1-6]> usw. vorkomen können. Also eine Mischung aus normaler Text-Eingabe und HTML-Tags wie z.B. <b> <i> aber auch Links. Deshalb funktionieren so einfachere Ersetzungen wie mit htmlentities() nicht.

Als Ergebnis sollten ausserhalb der 'erlaubten' HTML-Tags alle nicht HTML-Zeichen ersetzt werden.

Die einzige Möglichkeit die ich bisher gefunden habe wäre z.B. mittels einer Schleife und preg_match anhand der Referenzen den Text sortiert zu zerlegen um dann danach nur an den einzelnen 'bösen' Strings die Ersetzungen vorzunehmen und alles wieder in der richtigen Reihenfolge zusammenzubauen.

Aber das ist doch bestimmt ein bischen zu umständlich, oder?

hier ist so ein Schleifen-Beispiel:

$txt = array();
$a = array();
$pattern = '=^(.*?)<(h1|h2|h3|h4|h5|h6|p)(.*?)>(.*?)</\2>(.*)$=im';
while (preg_match($pattern, $s, $txt))
{
 // $txt[2] enthält den Tag
 // $txt[4] enthält den Tag-Inhalt
 $a[] = array('tag'=>$txt[2], 'tag_adds'=>$txt[3], 'content'=>$txt[4]);

// $s neu zusammenbauen
 // $txt[5] enthält den noch nicht verarbeiteten Text
 $s = $txt[1]."XXX".$txt[5];
}

Für Tipps oder Beispiele wäre ich sehr dankbar,
viele Grüße,

/^(.*?)(Anfänger|Schussel)?(.*)$/im