Torben: Brauche hilfe bei regulären ausdrücken!

Hi leute,

bin schon seit heute morgen am versuchen und probieren aber mit diesen regulären ausdrücken wills einfach nicht hinhauen, mein vorhaben:

$text = str_replace("<", "&lt;", $text);
$text = str_replace(">", "&gt;", $text);

allerdings soll das ganze nur dann ausgeführt werden wenn die beiden zeichen < und > nicht ein bestandteil von <br> sind!

kann mir einer von euch da weiterhelfen?

mfg torben

  1. Hallo Torben!

    bin schon seit heute morgen am versuchen und probieren aber mit diesen regulären ausdrücken wills einfach nicht hinhauen, mein vorhaben:
    $text = str_replace("<", "&lt;", $text);
    $text = str_replace(">", "&gt;", $text);
    allerdings soll das ganze nur dann ausgeführt werden wenn die beiden zeichen < und > nicht ein bestandteil von <br> sind!

    Ist zwar nicht was du suchst, aber wenn du am Ende die BR zurückverwandelst ist das Problem auch gelöst:
    $text = str_replace("&lt;br&gt;", "<br>", $text);

    Viele Grüße

    H-P Ortner

    1. hey,

      wie lustig vor einer sekunde kam ich da auch drauf auch wenn das nicht gerade die feine englische art ist...

      mfg torben

      1. Hello out there!

        wie lustig vor einer sekunde kam ich da auch drauf auch wenn das nicht gerade die feine englische art ist...

        Das sicher nicht, aber eventuell schneller als die Lösung mit Ausdruck* mit lookahead assertion; das hängt von Anteil der <br> in allen <…> ab.

        See ya up the road,
        Gunnar

        * Ich mag nicht von „regulär“ sprechen, wenn’s kein regulärer Ausdruck ist.

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  2. Hallo Torben.

    $text = str_replace("<", "&lt;", $text);
    $text = str_replace(">", "&gt;", $text);

    allerdings soll das ganze nur dann ausgeführt werden wenn die beiden zeichen < und > nicht ein bestandteil von <br> sind!

    Das dürfte recht einfach wie folgt gehen:

    Durchlaufe mit einer Schleife sämtliche Fundstellen von „<“ und gehe hierbei immer von der letzten Fundstelle aus; den selben Ausgangspunkt verwendest du innerhalb der Schleife, um nach „<br>“ zu suchen.

    Wenn die aktuelle Fundstelle von „<“ mit der aktuellen von „<br>“ übereinstimmt, überspringst du den aktuellen Schleifendurchlauf. Wenn nicht, dann führst du deine Ersetzung durch.

    Einen schönen Montag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
  3. Hello out there!

    bin schon seit heute morgen am versuchen und probieren aber mit diesen regulären ausdrücken wills einfach nicht hinhauen, mein vorhaben:
    $text = str_replace("<", "&lt;", $text);
    $text = str_replace(">", "&gt;", $text);

    Ich denke, du wolltest mit regulären Ausdrücken arbeiten? str_replace tut das nicht.

    preg_replace tut dies; dann kannst du beides zusammenfassen:

    $text = preg_replace("/<([^>]*)/", "&lt;\\1&gt;", $text);

    allerdings soll das ganze nur dann ausgeführt werden wenn die beiden zeichen < und > nicht ein bestandteil von <br> sind!

    Du möchtest also alle '<' finden, hinter denen nicht 'br' steht. Das geht mit negative lookahead assertions.

    kann mir einer von euch da weiterhelfen?

    http://forum.de.selfhtml.org/archiv/2005/6/t109413/#m683611

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)