Thomas: reguläre Ausdrücke: Zeilenumbrüche?

Hi!

Gilt '.' auch für einen Zeilenumbruch? Wenn nein, wie kann ich in '(.*?)' auch noch Zeilenumbrüche packen?

Danke
Thomas

  1. Hi,

    Gilt '.' auch für einen Zeilenumbruch?

    nicht, wenn Du nicht den Modifier "s" angibst.

    Wenn nein, wie kann ich in '(.*?)' auch noch Zeilenumbrüche packen?

    Darüber hinaus kannst Du einen Zeilenumbruch auch per Veroderung durch "|" explizit hinzufügen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah!

      Darüber hinaus kannst Du einen Zeilenumbruch auch per Veroderung

      Ich musste das Wort drei mal lesen, bevor ich es verstanden habe...

      Veroderung, nicht Verelberung oder Vermainerung... jaja..

      durch "|" explizit hinzufügen.

      Das wird für einen RegExp-Beginner nicht verständlicher (im Gegensatz zum bekannten Modifier s)... Kannst Du das näher erläutern?

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hi,

        Darüber hinaus kannst Du einen Zeilenumbruch auch per Veroderung
        Ich musste das Wort drei mal lesen, bevor ich es verstanden habe...

        'tschuldigung :-) Ver-ODER-ung.

        durch "|" explizit hinzufügen.
        Das wird für einen RegExp-Beginner nicht verständlicher (im Gegensatz zum bekannten Modifier s)... Kannst Du das näher erläutern?

        "Alle Zeichen (.) oder (|) Umbruch (\n)", vorausgesetzt "\n" ist das Zeichen für den Umbruch.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    2. aber "!blabla(.*?)blabla!s" funktioniert nicht für
      'blabla
      blabla'
      Was passt nicht?

      Danke
      Thomas

      1. Hallo Thomas!

        aber "!blabla(.*?)blabla!s" funktioniert nicht für
        'blabla
        blabla'
        Was passt nicht?

        Was willst Du heraus bekommen? Ich habe die RegExp in Perl getestet:

        my $string = "blabla
        blabla";

        if($string =~ /blabla(.*?)blabla/s) { print "wahr ($&)\n" }
            else { print "falsch\n" }

        Ausgabe:
        wahr (blabla
        blabla)

        --------------- OT für Perler:
        Warum erhalte ich, wenn ich im obigen Beispiel "!" als Delimiter nehme, folgende Meldung:

        if($string =~ !blabla(.*?)blabla!s) { print "w
        Bareword found where operator expected at - line 5, near ")blabla"
                (Missing operator before blabla?)

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
        1. Warum erhalte ich, wenn ich im obigen Beispiel "!" als Delimiter nehme, folgende Meldung:
          if($string =~ !blabla(.*?)blabla!s) { print "w
          Bareword found where operator expected at - line 5, near ")blabla"
                  (Missing operator before blabla?)

          Also ich erhalte keine Warnung (ActiveState Perl 5.8.8 unter Win2kPro).

          Siechfred

          1. Hallo Siechfred!

            Also ich erhalte keine Warnung (ActiveState Perl 5.8.8 unter Win2kPro).

            Seltsam, seltsam... (hier ist ActiveState Perl 5.8.7, Win XP SP2).
            Ein kompletter Test, direkt von der Konsole kopiert:

            -------------
            C:>perl -w
            use strict;

            my $t = "<form action='bla'>
            <input type='text' value='2'>
            <textarea></textarea>
            </form>";

            if($t =~ /<form.+form>/s) { print "wahr ($&)\n" }
                else { print "falsch\n" }

            #############
            my $string = "blabla
            blabla";

            if($string =~ !blabla(.*?)blabla!s) { print "wahr ($&)\n" }
            Bareword found where operator expected at - line 17, near ")blabla"
                    (Missing operator before blabla?)
                else { print "falsch\n" }
            ^Z
            syntax error at - line 17, near "(."
            Substitution replacement not terminated at - line 17.
            -------------

            ?

            Warum »substitution replacement»? Sieht so aus, wls würde er den Modifier s als Beginn einer Ersetzung sehen, alles davor ist unquoted also »Bareword«? Nur Warum?

            Noch mal mit /:

            -------------
            C:>perl -w
            use strict;

            my $t = "<form action='bla'>
            <input type='text' value='2'>
            <textarea></textarea>
            </form>";

            if($t =~ /<form.+form>/s) { print "wahr ($&)\n" }
                else { print "falsch\n" }

            #############
            my $string = "blabla
            blabla";

            if($string =~ /blabla(.*?)blabla/s) { print "wahr ($&)\n" }
                else { print "falsch\n" }
            ^Z
            wahr (<form action='bla'>
            <input type='text' value='2'>
            <textarea></textarea>
            </form>)
            wahr (blabla
            blabla)
            -------------

            Korrekt...

            Viele Grüße aus Frankfurt/Main,
            Patrick

            --

            _ - jenseits vom delirium - _
            [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            Nichts ist unmöglich? Doch!
            Heute schon gegökt?
        2. gudn tach!

          Warum erhalte ich, wenn ich im obigen Beispiel "!" als Delimiter nehme, folgende Meldung:

          if($string =~ !blabla(.*?)blabla!s) { print "w
          Bareword found where operator expected at - line 5, near ")blabla"
                  (Missing operator before blabla?)

          m

          prost
          seth

        3. Hi,

          Warum erhalte ich, wenn ich im obigen Beispiel "!" als Delimiter nehme, folgende Meldung:

          if($string =~ !blabla(.*?)blabla!s) { print "w

          AFAIK ist das m nur bei / optional (ich schreib's eigentlich immer hin, der Klarheit wegen).

          Was findet der Parser hier nach dem =~ vor?
          ! logisches not.
          blabla(.*)  sieht erstmal wie ein Funktionsaufruf aus, das folgende blabla ergibt dann keinen Sinn.

          Zumindest _könnte_ der Parser das so verstehen ...

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo MudGuard und seth!

            AFAIK ist das m nur bei / optional (ich schreib's eigentlich immer hin, der Klarheit wegen).

            Aaargh... Nicht AFAIK: Ist so. Bei anderen Delimitern als "/" muss das "m" vor dem ersten Delimiter vorhanden sein. Da ich RegExp bisher meistens für Ersetzungen gebraucht habe, kam ich nie in die Bredouille, denn das "s" für »Substitution« vergesse ich eigentlich nie.

            Viele Grüße aus Frankfurt/Main,
            Patrick

            --

            _ - jenseits vom delirium - _
            [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            Nichts ist unmöglich? Doch!
            Heute schon gegökt?
      2. aber "!blabla(.*?)blabla!s" funktioniert nicht für
        'blabla
        blabla'
        Was passt nicht?

        Ich bin mir nicht sicher, ob PHP bei PCRE andere Delimiter als '/' akzeptiert.

        Siechfred

        1. gudn tach!

          aber "!blabla(.*?)blabla!s" funktioniert nicht für
          'blabla
          blabla'
          Was passt nicht?

          welche funktion verwendest du? preg_match? dann sollte es funzen.

          Ich bin mir nicht sicher, ob PHP bei PCRE andere Delimiter als '/' akzeptiert.

          aber ich. ;-p

          prost
          seth

      3. Hellihello

        aber "!blabla(.*?)blabla!s" funktioniert nicht für
        'blabla
        blabla'
        Was passt nicht?

        bei mir passts:

          
        $subject='blabla  
          
        blabla';  
        $pattern ="!blabla(.*?)blabla!s";  
        preg_match($pattern, $subject, $matches);  
        print_r($matches);  
          
        /*  
        gives:  
        Array  
        (  
            [0] => blabla  
          
        blabla  
            [1] =>  
          
          
        )  
        */  
        
        

        Gruß,

        frankx