Sipatshi: Regex

Hallo Gemeinde,

vorab zur Info: ich bin kein Regex Profi! Bitte die Baseballschläger im Schrank lassen, wenn der "Ausdruck" bzw. Lösungsansatz Augenkrebs bei einigen Foren-Lesern/in verursacht.

1.) Mit folgendem Ausdruck: "/o(.*(]|));/msU" möchte ich alle Parts im $string matchen die mit 'o(' beginnen und bei erstem vorkommen auf '];' oder ');' enden. Allerdings werden auch Bereiche gematched die nicht "wirklich" zum Muster passen. Siehe unten Ergebnis Position 1 und 2!

$string = 'o("Hello World")->get("boo")["foo"]  
                ->reserve()["chuck"]  
                ->final("end");  
  
if(o("Hello World")->pregMatch("/Hello/")[2]) {  
  
        echo "chuck norris";  
  
        o($array)[0][1][2]->test("chuck norris")["xxx"][xxx]  
                          ->shuffle()["xxx"];  
  
        if(o("hier")->isArray()) {  
            echo "is Array";  
        } else {  
            echo "not Array";  
        }  
 }  
  
 o($foo)[0][2]["foo"]  
    ->sttoupper()  
    ->reserve();  
  
 if($foo === "serkan"){  
  
        o("tesf")->test("ironman")["d"]->reserve();  
 }  
  
 o($test)->test($jo)[33]  
         ->reserve()[333];  
  
 o("tesf")->test($jo)["d"]->reserve()[4444];  
  
 o(navigator)->userAgent()->pregMatch("/iphone/")[0];'

Ergebnis:
array (size=2)
  0 =>
    array (size=7)
      0 => string 'o("Hello World")->get("boo")["foo"]
                            ->reserve()["chuck"]
                            ->final("end");' (length=128)
      1 => string 'o("Hello World")->pregMatch("/Hello/")[2]) {

echo "chuck norris";

o($array)[0][1][2]->test("chuck norris")["xxx"][xxx]
                                      ->shuffle()[xxx];' (length=217)
      2 => string 'o("hier")->isArray()) {
                        echo "is Array";
                    } else {
                        echo "not Array";
                    }
             }

o($foo)[0][2]["foo"]
                ->sttoupper()
                ->reserve();' (length=266)
      3 => string 'o("tesf")->test("ironman")["d"]->reserve();' (length=43)
      4 => string 'o($test)->test($jo)[33]
                     ->reserve()[333];' (length=68)
      5 => string 'o("tesf")->test($jo)["d"]->reserve()[4444];' (length=49)
      6 => string 'o(navigator)->userAgent()->pregMatch("/iphone/")[0];' (length=52)

2.) Dann gibt es noch folgende Fälle. Da weis ich nicht wirklich wie ich an die Sache ran gehen soll. z.B. der Ausdruck(siehe oben) der innerhalb if()/elsif()/for()/foreach()/while()/usw vorkommen kann.

Vielleicht ist der Punkt 1 und 2 anders zu löschen. Also ohne Reguläre Ausdrücke! Ich bitte um konstruktive Vorschläge

        if(o("hier")->isArray()) {  
            echo "is Array";  
        } else {  
            echo "not Array";  
        }
  1. Tach!

    ich bin kein Regex Profi! Bitte die Baseballschläger im Schrank lassen, wenn der "Ausdruck" bzw. Lösungsansatz Augenkrebs bei einigen Foren-Lesern/in verursacht.

    Nö, lediglich den \ vor der ] kannst du weglassen. Ohne ein [ ist die nämlich harmlos.

    1.) Mit folgendem Ausdruck: "/o(.*(]|));/msU" möchte ich alle Parts im $string matchen die mit 'o(' beginnen und bei erstem vorkommen auf '];' oder ');' enden. Allerdings werden auch Bereiche gematched die nicht "wirklich" zum Muster passen. Siehe unten Ergebnis Position 1 und 2!

    Passen doch alle auf dein Muster. Definiere bitte in Worten, wann der Ausdruck nicht gefunden werden soll.

    2.) Dann gibt es noch folgende Fälle. Da weis ich nicht wirklich wie ich an die Sache ran gehen soll. z.B. der Ausdruck(siehe oben) der innerhalb if()/elsif()/for()/foreach()/while()/usw vorkommen kann.
    Vielleicht ist der Punkt 1 und 2 anders zu löschen. Also ohne Reguläre Ausdrücke! Ich bitte um konstruktive Vorschläge

    Schreib einen Parser, der sich mit den Regeln des Codes auskennt und beliebige Verschachtelungen zu erkennen in der Lage ist. Der Tokenizer kann dir zumindest beim Erkennen der syntaktischen Elemente PHPs helfen. preg... ist zwar in der Lage, Rekursionen in Mustern zu erkennen (z.B. zusammengehörige Klammernpaare), aber das klappt nicht in jedem Fall (z.B. einzelne Klammern in Strings versteckt).

    dedlfix.

    1. 1.) Mit folgendem Ausdruck: "/o(.*(]|));/msU" möchte ich alle Parts im $string matchen die mit 'o(' beginnen und bei erstem vorkommen auf '];' oder ');' enden. Allerdings werden auch Bereiche gematched die nicht "wirklich" zum Muster passen. Siehe unten Ergebnis Position 1 und 2!

      Passen doch alle auf dein Muster. Definiere bitte in Worten, wann der Ausdruck nicht gefunden werden soll.

      Das erinnert mich an den Blacklist Ansatz ! Wenn ich jetzt in Worten definieren soll, wann der Ausdruck nicht gefunden werden soll, könnte ich nicht alle Möglichkeiten aufzählen. Es ist doch besser zu definieren, wann es zutrifft:

      Der Audruck passt nur dann:

      1.) Wenn auf den Funktionsaufruf o(/*...*/) ein/mehrere Methodenaufruf/e oder ein/mehrere array Index/e folgen oder optinal auf den array Index ein/mehrere Methodenaufrufe/e folgen. Das ganze soll immer mit einem Semikolon enden.

      z.B. wie hier:

      o("Hello World")->get("boo")["foo"]  
                      ->reserve()["chuck"]  
                      ->final("end");
      

      oder

      o("Hello World")->get("boo");

      oder

      o("Hello World")[3];

      o("Hello World")->method()->method()[1][2]->method();

      Verstanden?

      2.) Dann gibt es noch folgende Fälle. Da weis ich nicht wirklich wie ich an die Sache ran gehen soll. z.B. der Ausdruck(siehe oben) der innerhalb if()/elsif()/for()/foreach()/while()/usw vorkommen kann.
      Vielleicht ist der Punkt 1 und 2 anders zu löschen. Also ohne Reguläre Ausdrücke! Ich bitte um konstruktive Vorschläge

      Schreib einen Parser, der sich mit den Regeln des Codes auskennt und beliebige Verschachtelungen zu erkennen in der Lage ist. Der Tokenizer kann dir zumindest beim Erkennen der syntaktischen Elemente PHPs helfen. preg... ist zwar in der Lage, Rekursionen in Mustern zu erkennen (z.B. zusammengehörige Klammernpaare), aber das klappt nicht in jedem Fall (z.B. einzelne Klammern in Strings versteckt).

      Das muss ich mir in Ruhe anschauen! Kannte ich bis Dato nicht. Es scheint/sieht nach einer schwergewichte Kost aus. Gerne möchte ich das ganze mit Regulären Ausdrücken löschen!

      1. Tach!

        Der Audruck passt nur dann:
        1.) Wenn auf den Funktionsaufruf o(/*...*/) ein/mehrere Methodenaufruf/e oder ein/mehrere array Index/e folgen oder optinal auf den array Index ein/mehrere Methodenaufrufe/e folgen. Das ganze soll immer mit einem Semikolon enden.

        Das heißt, dass diese Aufrufe nicht gefunden werden sollen, wenn sie als Funktionsparameter oder Ausdrucksbestandteil (z.B. in einer Bedingung vor einem or/and) notiert kein ; hintendran haben - oder die auch?

        Verstanden?

        Ja. Ist vermutlich nicht unlösbar, wird aber nicht einfach. Mein Weg wäre, nicht alles bis zum ; finden zu wollen, sondern die möglichen Verkettungen (mit "recursive pattern" Klammern und Strings berücksichtigen) bis zum nicht mehr nachfolgenden -> nebst Whitespace (assertion). Schwierig schätze ich die Stelle, an der du Klammern in Strings erkennen/ignorieren musst. Jedenfalls wird das ein ziemlich unwartbares Monster.

        [Parser mit Tokenizer]
        Das muss ich mir in Ruhe anschauen! Kannte ich bis Dato nicht. Es scheint/sieht nach einer schwergewichte Kost aus. Gerne möchte ich das ganze mit Regulären Ausdrücken löschen!

        Zum Löschen nimm rm oder del ... Ich denke, du kommst nervenschonender ans Ziel, wenn du die Token-Geschichte nimmst. Dabei wertest du nicht nach Mustern aus, die sonstwo vorkommen können und damit unerünscht sind, sondern findest anhand der Bedeutung die dich interessierenden Teile.

        dedlfix.

        1. moin moin

          Das heißt, dass diese Aufrufe nicht gefunden werden sollen, wenn sie als Funktionsparameter oder Ausdrucksbestandteil (z.B. in einer Bedingung vor einem or/and) notiert kein ; hintendran haben - oder die auch?

          Doch, diese sollen auch gefunden werden! Erst einmal wollte ich alle Bereiche matchen(da habe ich immer noch keine Lösung :( ) die "nicht" innerhalb einer Funktion aufgerufen werden bzw. ein Teil eines Ausdrucks sind und dann im zweiten Schritt mit der Token-Geschichte alle Bereiche lokalisieren die ein Teil einer Funktion/Bedingung/while/for usw sind!

          Hier meine ersten Gehversuche, was nicht wirklich funktioniert! Was mache ich falsch?

            
          $source = '<?  
            
              # use oopRuntime as file;  
            
              echo o(["test1", ["test2", "test3"]])[1]->shuffle()[0]->ucfirst();  
            
              class Foo {  
            
                  public $tmp = null;  
            
                  public function __construct($tmp) {  
                      $this->tmp = $tmp;  
                  }  
                  public function init(){  
            
                      $res = o($this->tmp)->explode('|')[1]->strtolower()->pregMatch("/Was/")[0]->strtolower();  
            
            
                      if(o("Hallo")->pregMatch("Ha")){  
                          echo "hallo";  
                      }  
            
                  }  
            
              }  
            
              $o = new Foo("Hallo|Was|Geht|Ab");  
              echo $o->init();  
          ?>';  
            
          $tokens = \token_get_all($source);  
            
          foreach ($tokens as $token) {  
            
              var_dump($token);  
            
              if (is_string($token)) {  
                  var_dump($token);  
              } else {  
                  // Token Array  
                  list($id, $text) = $token;  
            
                  switch ($id) {  
                      case T_IF:  
                          var_dump($token); #passiert nichts !  
                          break;  
                      default:  
                          #var_dump($token);  
                          break;  
                  }  
              }  
          }
          

          Zum Löschen nimm rm oder del ... Ich denke, du kommst nervenschonender ans Ziel, wenn du die Token-Geschichte nimmst. Dabei wertest du nicht nach Mustern aus, die sonstwo vorkommen können und damit unerünscht sind, sondern findest anhand der Bedeutung die dich interessierenden Teile.

          Jep, das gefällt mir :)

          Gruß

          Sipatshi

          1. Tach!

            Hier meine ersten Gehversuche, was nicht wirklich funktioniert! Was mache ich falsch?

            Du hast einen Ausdruck mit einem binären Oder notiert - oder vergessen, ein Paar ' zu maskieren.

            dedlfix.

            1. Hey Ho Allwissender :)

              Du hast einen Ausdruck mit einem binären Oder notiert - oder vergessen, ein Paar ' zu maskieren.

              jep, eines von beiden war es, thnx :)

              Interessant, interessant was man mit dem Tokenizer alles so anstellen kann. Echt cool ! Da gebe ich dir recht, das Reguläre-Ausdrücke überflussig sind wenn die Bereiche lokalisiert werden sollen die mit 'o(' beginnen und mit ';' enden oder innerhalb einer Funktion/While aufgerufen werden. Ich bin dir sehr sehr Dankbar :)

              Ergebniss:

              array (size=3)
                0 => int 372
                1 => string '<?' (length=2)
                2 => int 1
              
              array (size=3)
                0 => int 375
                1 => string '
              
                  ' (length=10)
                2 => int 1
              
              array (size=3)
                0 => int 370
                1 => string '# use oopRuntime as file;
              ' (length=26)
                2 => int 3
              
              array (size=3)
                0 => int 375
                1 => string '
                  ' (length=5)
                2 => int 4
              
              array (size=3)
                0 => int 316
                1 => string 'echo' (length=4)
                2 => int 5
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 5
              
              array (size=3)
                0 => int 307
                1 => string 'o' (length=1)
                2 => int 5
              
              string '(' (length=1)
              
              string '[' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"test1"' (length=7)
                2 => int 5
              
              string ',' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 5
              
              string '[' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"test2"' (length=7)
                2 => int 5
              
              string ',' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 5
              
              array (size=3)
                0 => int 315
                1 => string '"test3"' (length=7)
                2 => int 5
              
              string ']' (length=1)
              
              string ']' (length=1)
              
              string ')' (length=1)
              
              string '[' (length=1)
              
              array (size=3)
                0 => int 305
                1 => string '1' (length=1)
                2 => int 5
              
              string ']' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 5
              
              array (size=3)
                0 => int 307
                1 => string 'shuffle' (length=7)
                2 => int 5
              
              string '(' (length=1)
              
              string ')' (length=1)
              
              string '[' (length=1)
              
              array (size=3)
                0 => int 305
                1 => string '0' (length=1)
                2 => int 5
              
              string ']' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 5
              
              array (size=3)
                0 => int 307
                1 => string 'ucfirst' (length=7)
                2 => int 5
              
              string '(' (length=1)
              
              string ')' (length=1)
              
              string ';' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
                  ' (length=6)
                2 => int 5
              
              array (size=3)
                0 => int 354
                1 => string 'class' (length=5)
                2 => int 7
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 7
              
              array (size=3)
                0 => int 307
                1 => string 'Foo' (length=3)
                2 => int 7
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 7
              
              string '{' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
                      ' (length=18)
                2 => int 7
              
              array (size=3)
                0 => int 343
                1 => string 'public' (length=6)
                2 => int 9
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 9
              
              array (size=3)
                0 => int 309
                1 => string '$tmp' (length=4)
                2 => int 9
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 9
              
              string '=' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 9
              
              array (size=3)
                0 => int 307
                1 => string 'null' (length=4)
                2 => int 9
              
              string ';' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
                      ' (length=18)
                2 => int 9
              
              array (size=3)
                0 => int 343
                1 => string 'public' (length=6)
                2 => int 11
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 11
              
              array (size=3)
                0 => int 334
                1 => string 'function' (length=8)
                2 => int 11
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 11
              
              array (size=3)
                0 => int 307
                1 => string '__construct' (length=11)
                2 => int 11
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 309
                1 => string '$tmp' (length=4)
                2 => int 11
              
              string ')' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 11
              
              string '{' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
                          ' (length=13)
                2 => int 11
              
              array (size=3)
                0 => int 309
                1 => string '$this' (length=5)
                2 => int 12
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 12
              
              array (size=3)
                0 => int 307
                1 => string 'tmp' (length=3)
                2 => int 12
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 12
              
              string '=' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 12
              
              array (size=3)
                0 => int 309
                1 => string '$tmp' (length=4)
                2 => int 12
              
              string ';' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
                      ' (length=9)
                2 => int 12
              
              string '}' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
                      ' (length=9)
                2 => int 13
              
              array (size=3)
                0 => int 343
                1 => string 'public' (length=6)
                2 => int 14
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 14
              
              array (size=3)
                0 => int 334
                1 => string 'function' (length=8)
                2 => int 14
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 14
              
              array (size=3)
                0 => int 307
                1 => string 'init' (length=4)
                2 => int 14
              
              string '(' (length=1)
              
              string ')' (length=1)
              
              string '{' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
                          ' (length=26)
                2 => int 14
              
              array (size=3)
                0 => int 309
                1 => string '$res' (length=4)
                2 => int 16
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 16
              
              string '=' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 16
              
              array (size=3)
                0 => int 307
                1 => string 'o' (length=1)
                2 => int 16
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 309
                1 => string '$this' (length=5)
                2 => int 16
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 16
              
              array (size=3)
                0 => int 307
                1 => string 'tmp' (length=3)
                2 => int 16
              
              string ')' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 16
              
              array (size=3)
                0 => int 307
                1 => string 'explode' (length=7)
                2 => int 16
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"|"' (length=3)
                2 => int 16
              
              string ')' (length=1)
              
              string '[' (length=1)
              
              array (size=3)
                0 => int 305
                1 => string '1' (length=1)
                2 => int 16
              
              string ']' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 16
              
              array (size=3)
                0 => int 307
                1 => string 'strtolower' (length=10)
                2 => int 16
              
              string '(' (length=1)
              
              string ')' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 16
              
              array (size=3)
                0 => int 307
                1 => string 'pregMatch' (length=9)
                2 => int 16
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"/Was/"' (length=7)
                2 => int 16
              
              string ')' (length=1)
              
              string '[' (length=1)
              
              array (size=3)
                0 => int 305
                1 => string '0' (length=1)
                2 => int 16
              
              string ']' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 16
              
              array (size=3)
                0 => int 307
                1 => string 'strtolower' (length=10)
                2 => int 16
              
              string '(' (length=1)
              
              string ')' (length=1)
              
              string ';' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
                          ' (length=14)
                2 => int 16
              
              array (size=3)
                0 => int 301
                1 => string 'if' (length=2)
                2 => int 18
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 307
                1 => string 'o' (length=1)
                2 => int 18
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"Hallo"' (length=7)
                2 => int 18
              
              string ')' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 18
              
              array (size=3)
                0 => int 307
                1 => string 'pregMatch' (length=9)
                2 => int 18
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"Ha"' (length=4)
                2 => int 18
              
              string ')' (length=1)
              
              string ')' (length=1)
              
              string '{' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 18
              
              array (size=3)
                0 => int 316
                1 => string 'echo' (length=4)
                2 => int 18
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 18
              
              array (size=3)
                0 => int 315
                1 => string '"hallo"' (length=7)
                2 => int 18
              
              string ';' (length=1)
              
              string '}' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 18
              
              array (size=3)
                0 => int 301
                1 => string 'if' (length=2)
                2 => int 18
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 307
                1 => string 'o' (length=1)
                2 => int 18
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"Hallo"' (length=7)
                2 => int 18
              
              string ')' (length=1)
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 18
              
              array (size=3)
                0 => int 307
                1 => string 'pregMatch' (length=9)
                2 => int 18
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"Ha"' (length=4)
                2 => int 18
              
              string ')' (length=1)
              
              string ')' (length=1)
              
              string '{' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 18
              
              array (size=3)
                0 => int 316
                1 => string 'echo' (length=4)
                2 => int 18
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 18
              
              array (size=3)
                0 => int 315
                1 => string '"hallo"' (length=7)
                2 => int 18
              
              string ';' (length=1)
              
              string '}' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
              
                      ' (length=23)
                2 => int 18
              
              string '}' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
                  ' (length=5)
                2 => int 21
              
              string '}' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
                  ' (length=6)
                2 => int 22
              
              array (size=3)
                0 => int 309
                1 => string '$o' (length=2)
                2 => int 24
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 24
              
              string '=' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 24
              
              array (size=3)
                0 => int 299
                1 => string 'new' (length=3)
                2 => int 24
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 24
              
              array (size=3)
                0 => int 307
                1 => string 'Foo' (length=3)
                2 => int 24
              
              string '(' (length=1)
              
              array (size=3)
                0 => int 315
                1 => string '"Hallo|Was|Geht|Ab"' (length=19)
                2 => int 24
              
              string ')' (length=1)
              
              string ';' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
                  ' (length=5)
                2 => int 24
              
              array (size=3)
                0 => int 316
                1 => string 'echo' (length=4)
                2 => int 25
              
              array (size=3)
                0 => int 375
                1 => string ' ' (length=1)
                2 => int 25
              
              array (size=3)
                0 => int 309
                1 => string '$o' (length=2)
                2 => int 25
              
              array (size=3)
                0 => int 359
                1 => string '->' (length=2)
                2 => int 25
              
              array (size=3)
                0 => int 307
                1 => string 'init' (length=4)
                2 => int 25
              
              string '(' (length=1)
              
              string ')' (length=1)
              
              string ';' (length=1)
              
              array (size=3)
                0 => int 375
                1 => string '
              
              ' (length=6)
                2 => int 25
              
              array (size=3)
                0 => int 374
                1 => string '?>' (length=2)
                2 => int 27
              
              

              Gruß

              Sipatshi

  2. Hi,

    1.) Mit folgendem Ausdruck: "/o(.*(]|));/msU" möchte ich alle Parts im $string matchen die mit 'o(' beginnen und bei erstem vorkommen auf '];' oder ');' enden.

    Vom ersten Vorkommen sagst Du aber nichts - im Gegenteil. .* grabscht sich so viele Zeichen wie möglich.

    Wenn Du stattdessen so wenig Zeichen wie möglich grabschen willst, mußt Du das ungreedy machen, also .*? stattdessen benutzen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Tach!

      1.) Mit folgendem Ausdruck: "/o(.*(]|));/msU" möchte ich alle Parts im $string matchen die mit 'o(' beginnen und bei erstem vorkommen auf '];' oder ');' enden.
      Vom ersten Vorkommen sagst Du aber nichts - im Gegenteil. .* grabscht sich so viele Zeichen wie möglich.

      U nter U mständen aber nicht.

      Wenn Du stattdessen so wenig Zeichen wie möglich grabschen willst, mußt Du das ungreedy machen, also .*? stattdessen benutzen.

      Oder mit dem dafür vorgesehenen Modifier.

      dedlfix.

      1. Hi,

        U nter U mständen aber nicht.

        /u-/U. Da hab ich was übersehen. Bei Perl gibt's nur /u (UTF-8), kein /U.

        Vermutlich heißen die Dinger bei PHP deswegen Perl-compatible, weil sie nicht perl-compatible sind ... ;-)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    2. Hallo

      Wenn Du stattdessen so wenig Zeichen wie möglich grabschen willst, mußt Du das ungreedy machen, also .*? stattdessen benutzen.

      macht man das nicht mit dem Modifier 'U' ?