WauWau: ^ und $ in Regular Expressions?

Hola,

es geht um mein Syntaxsystem meiner Hilfe-Wiki. Die wollte ich zwar eigentlich in Perl schreiben... aber es erschien mir dann doch etwas kompliziert, vorallem weil ich mir über den Alghorithmus [...] meines Programmchens noch nicht im klaren war/bin.

Nun, darum geht es jetzt aber nicht. Sondern um "PCRE_MULTILINE". Nehmen wir mal folgendes Beispielchen:

$str = preg_replace('/^(-{4,} *)$/m', '<hr />', $str);

Nun, das soll eigentlich min. 4. "-" direkt am Anfang einer Zeile finden, danach evventuelle Leerzeichen. Das soll die gesamte Zeile sein. Nix weiteres.

Funktionieren tut es nicht. Wieso nicht? Was ist falsch?

Oder ein anderes Beispiel (etwas komplizierter):

$headings = array('#' => 'h1', '+' => 'h2', '-' => 'h3', '!' => 'h4', ';' => 'h5', ':' => 'h6');
    foreach($headings as $p => $r)
    {
        #print "/^(?: *)$p{3}(?: *)([^$p]*)(?: *)$p{3}(?: *)$/i";
        $str = preg_replace("/^(?: *)$p{3}(?: *)([^$p]*)(?: *)$p{3}(?: *)$/im", "<$r>\1</$r>", $str);
    }

Nun, hier soll z.B. folgendes:

###Überschriften Ebene 1###
   +++  Überschriftenebene 2  +++
 ---Überschrift3---
 !!!    Überschrift  4 !!!
   ;;; 5... ;;;
 ::: und die 6 :::

schlicht und einfach zu

<h1>Überschriften Ebene 1</h1>
<h2>Überschriftenebene 2</h2>
<h3>Überschrift3</h3>
<h4>Überschrift 4</h4>
<h5>5...</h5>
<h6>und die 6</h6>

umgewandelt werden. Funktionieren tud es so nicht. Es funktioniert jedoch, wenn ich anstatt dem Regulären Ausdruck

/^(?: *)$p{3}(?: *)([^$p]*)(?: *)$p{3}(?: *)$/im
                                               ^

denda

/^(?: *)$p{3}(?: *)([^$p]*)(?: *)$p{3}(?: *)/im
                                              ^^

benutze (also ohne $ am Ende). Will ich aber eigentlich nicht.

WauWau

--
ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
E-Mail WauWau: [mailto:der-wauwau@gmx.de]
  1. N'Abend,

    Nun, darum geht es jetzt aber nicht. Sondern um "PCRE_MULTILINE". Nehmen wir mal folgendes Beispielchen:

    $str = preg_replace('/^(-{4,} *)$/m', '<hr />', $str);

    $str = preg_replace('/^(-{4,} *)$/m', '<hr />', $str);
    ;)

    benutze (also ohne $ am Ende). Will ich aber eigentlich nicht.

    $ ist das ZEILENende. Nutzt der Dir bei multiline was?

    Gruß, Thoralf

    --
    Sic Luceat Lux!
    1. Hola Thoralf,

      Nun, darum geht es jetzt aber nicht. Sondern um "PCRE_MULTILINE". Nehmen wir mal folgendes Beispielchen:

      $str = preg_replace('/^(-{4,} *)$/m', '<hr />', $str);
           $str = preg_replace('/^(-{4,} *)$/m', '<hr />', $str);
      ;)

      Hmmm... afaik brauch man das "-" nur in einer "Character-Class" zu escapen ... !?

      benutze (also ohne $ am Ende). Will ich aber eigentlich nicht.
      $ ist das ZEILENende. Nutzt der Dir bei multiline was?

      nö. Obwohl ^ und $ im Manual auch als "asser start / end of subject" beschrieben werden!?

      Ich probier es nun mit

      /^(-{4,} *)$/

      aus, und es funktioniert trotzdem nicht.

      WauWau

      --
      ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
      E-Mail WauWau: [mailto:der-wauwau@gmx.de]