Ankündigung

Einklappen
Keine Ankündigung bisher.

Multiline RegEx

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Multiline RegEx

    Servus,

    ich hab ein kleines Problem mit einen RegEx...
    ich habe eine Datei die wie folgt ausgebaut ist:

    Code:
    C
    Dies ist
    der 1. Testtext.
    c
    C
    Dies ist
    der 2. Testtext.
    c
    ich versuche nun die Textstellen zwischen C\n und \nc zu bekommen aber irgendwie hauts ned hin...

    PHP-Code:
    <?php
    $file_content 
    file_get_contents("temp");

    $pattern '|C\n(.*)\nc|m';

    preg_match($pattern$file_content$matches);

    echo 
    "<pre>";
    print_r($matches);
    echo 
    "</pre>";
    ?>
    weiß jemand wo mein Denkfehler liegt?
    Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.


  • #2
    eventuell mal so versucht

    Code:
    $str=str_replace(array("C\n","\nc"),array('','~'),$file_content);
    $array=explode('~',$str);
    
    
    echo "<pre>";
    var_dump($array);
    echo "</pre>";

    Kommentar


    • #3
      außerdem hast du den modifier m falsch verstanden. erstens brauchst du ihn hier nicht und zweitens müßtest du ^ und/oder $ (assertions) verwenden, damit er überhaupt wirkung zeigt.

      außerdem mußt du \n innerhalb von " (und nicht ') notieren, damit es als zeilenumbruch erkannt wird. ohne modifier s wird auch .* niemals auf mehrzeiligen text zutreffen.

      Kommentar


      • #4
        Selbst mit den Erklärungen hier im Thread war ich irgendwie nicht dazu in der Lage ein Pattern zu schreiben welches zutrifft.

        Wie müsste denn das Pattern richtig aussehen damit es auf den Text angewandt funktioniert?
        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

        Kommentar


        • #5
          preg_match("#^(C\n)(.*)(\nc)#sU", $file_content, $matches);

          Kommentar


          • #6
            hmm sorry aber das erzeugt bei mir keinen Treffer
            Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

            Kommentar


            • #7
              dann solltest du dein script nach unix konvertieren oder das newlinezeichen anpassen

              dos - unix (cr/lf - lf)

              oder mal http://regexp-evaluator.de/
              lesen

              Kommentar


              • #8
                Wenn das erste C immer gross, und das zweite c immer klein ist, dann gehts auch so:

                '~C(.+)c~sU'

                oder

                '~C(.*?)c~s'

                mehr nicht.

                Kommentar


                • #9
                  @cix : so gehts nicht. der linebreak muß zwingend im pattern auftauchen, sonst paßts auch bei Text, der einfach C und c enthält.

                  Kommentar


                  • #10
                    Achso stimmt ja !
                    Sorry, da lag ich voll daneben ...

                    Kommentar


                    • #11
                      so mit Hilfe aus einen anderen Forum:

                      |C\r?\n(.*?)\r?\nc|s

                      das ganze in einen preg_match_all und ich bekomme alles
                      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                      Kommentar

                      Lädt...
                      X