Willi H.: Regulärer Ausdruck: Nur ein Teil des Patterns case-insensitive

Guten Tag!

Folgendes Pattern matcht mit "foo" und "bar" in beliebiger Groß- und Kleinschreibung.

'~(foo|bar)~i'

Wie lautet die Syntax, wenn nur "bar" case-insensitive matchen soll?

Schöne Grüße vom Willi

  1. Hi,

    Folgendes Pattern matcht mit "foo" und "bar" in beliebiger Groß- und Kleinschreibung.

    '~(foo|bar)~i'

    Wie lautet die Syntax, wenn nur "bar" case-insensitive matchen soll?

    http://www.php.net/manual/en/regexp.reference.internal-options.php

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Guten Tag, ChrisB!

      http://www.php.net/manual/en/regexp.reference.internal-options.php

      Danke sehr!

      So wird demnach das Gewünschte erreicht:

      '~(foo|bar(?i))~'

      Schöne Grüße vom Willi

      1. So wird demnach das Gewünschte erreicht:

        '~(foo|bar(?i))~'

        Ups, so natürlich:

        '~(foo|(?i)(bar))~'

        Stimmt das?

    2. Hello Chris,

      Folgendes Pattern matcht mit "foo" und "bar" in beliebiger Groß- und Kleinschreibung.

      '~(foo|bar)~i'

      Wie lautet die Syntax, wenn nur "bar" case-insensitive matchen soll?

      http://www.php.net/manual/en/regexp.reference.internal-options.php

      Spannende Zusatzfrage:
      Wie schaltet man denn caseless wieder aus, wenn man es mit dem Inline-Modifier mitten im Muster eingeschaltt hat, es aber nicht bis zum Ende gelten soll?

      Ist das nun ein Toggle Switch, oder nur ein eindeutiger Schalter?

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi!

        http://www.php.net/manual/en/regexp.reference.internal-options.php
        Spannende Zusatzfrage:
        Wie schaltet man denn caseless wieder aus, wenn man es mit dem Inline-Modifier mitten im Muster eingeschaltt hat, es aber nicht bis zum Ende gelten soll?

        Das steht auf der verlinkten Seite beschrieben.

        Lo!

        1. Hello,

          http://www.php.net/manual/en/regexp.reference.internal-options.php
          Spannende Zusatzfrage:
          Wie schaltet man denn caseless wieder aus, wenn man es mit dem Inline-Modifier mitten im Muster eingeschaltt hat, es aber nicht bis zum Ende gelten soll?

          Das steht auf der verlinkten Seite beschrieben.

          Wo bitte? Ich bin wohl leider zu blind, es zu finden.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Guten Abend, Tom!

            Wo bitte? Ich bin wohl leider zu blind, es zu finden.

            User Contributed Notes: 2/2

            Schöne Grüße vom Willi

            1. Hello Willi,

              Wo bitte? Ich bin wohl leider zu blind, es zu finden.

              User Contributed Notes: 2/2

              Da steht nur, wie man den Modifier nur für eine Gruppe innerhalb des Musters einschalten kann, aber nicht, wie man ihn wieder ausschalten kann.

              Der Text in der Beschreibung ließ aber vermuten, dass man mit einem Modifier die Funktionalität einschalten und (ggf. mit einem anderen) die Funktion wieder ausschalten könne.

              Das hat mir in Erinnerung gerufen, dass die Modifier (irgendwo) eigentlich Toggle-Schalter waren, also einmal ?i:xxxxx einschalten, nochmal ?i:xxxxx wieder ausschalten. Leider weiß ich nicht mehr, in welchem Zusammenhang und bei welcher Art Regular Expressions ich das gelesen hatte.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Guten Abend, Tom!

                Da steht nur, wie man den Modifier nur für eine Gruppe innerhalb des Musters einschalten kann, aber nicht, wie man ihn wieder ausschalten kann.

                Doch, dort steht:

                ?-<modifier>

                Der Text in der Beschreibung ließ aber vermuten, dass man mit einem Modifier die Funktionalität einschalten und (ggf. mit einem anderen) die Funktion wieder ausschalten könne.

                Kann man ja auch.

                Einschalten:
                ?<modifier>:

                Ausschalten:
                ?-<modifier>

                Das hat mir in Erinnerung gerufen, dass die Modifier (irgendwo) eigentlich Toggle-Schalter waren, also einmal ?i:xxxxx einschalten, nochmal ?i:xxxxx wieder ausschalten. Leider weiß ich nicht mehr, in welchem Zusammenhang und bei welcher Art Regular Expressions ich das gelesen hatte.

                Hast du denn meinen Beitrag von 18:49 Uhr nicht gelesen?

                Schöne Grüße vom Willi

                1. Hast du denn meinen Beitrag von 18:49 Uhr nicht gelesen?

                  Ich meine von 19:40 Uhr.

                  1. Hello,

                    Hast du denn meinen Beitrag von 18:49 Uhr nicht gelesen?

                    Ich meine von 19:40 Uhr.

                    Es ist, wie immer, nett, dass wior darüber gesprochen haben :-))

                    Liebe Grüße aus dem schönen Oberharz

                    Tom vom Berg

                    --
                     ☻_
                    /▌
                    / \ Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                    1. Guten Tag, Tom!

                      Es ist, wie immer, nett, dass wior darüber gesprochen haben :-))

                      Das verstehe ich jetzt nicht. Erklärst du's mir?

                      Schöne Grüße vom Willi

              2. Hallo,

                Wo bitte? Ich bin wohl leider zu blind, es zu finden.

                User Contributed Notes: 2/2

                und im Text, ich zitiere

                "It is also possible to unset these options by preceding
                     the letter with a hyphen"

                Testen wir das Verhalten mit folgenem Codefragment:

                    $haystack = array(  
                        'abcd',  
                        'abCd',  
                        'abCD',  
                        'abcD');  
                	  
                    $pattern = '/ab(?i)c(?-i)d/';  
                    $result = array();  
                  
                    # Testen wir den RegEx		  
                    foreach ($haystack as $needle) {  
                        $matches = array();  
                        $match   = '';  
                        if (preg_match($pattern, $needle, $matches)) {  
                            # es kann maximal ein Match geben :-)  
                            $match = $matches[0];  
                        }  
                        $result[$needle] = $match;  
                    }  
                  
                    # und schauen uns das Ergebnis an:	  
                    echo "<pre>\n";  
                    foreach($result as $key => $value) {  
                        echo $key, " => ", $value, "\n";  
                    }  
                    echo "</pre>\n";  
                    /*  
                        gibt folgendes aus:  
                            abcd => abcd  
                            abCd => abCd  
                            abCD =>  
                            abcD =>  
                    */  
                
                

                Passt!

                Zusätzlich gilt, dass innerhalb eines Subpatterns die Änderung nur für das Subpattern gilt. Über diese Schiene kannst Du ebenfalls unterschiedliche Optionen nutzen.

                Freundliche Grüße

                Vinzenz

                1. Guten Abend, Vinzenz!

                  und im Text, ich zitiere

                  "It is also possible to unset these options by preceding
                       the letter with a hyphen"

                  Natürlich, wo du recht hast, ... :-)

                  Testen wir das Verhalten mit folgenem Codefragment:

                  $haystack = array(

                  'abcd',
                          'abCd',
                          'abCD',
                          'abcD');

                  $pattern = '/ab(?i)c(?-i)d/';
                      $result = array();

                  # Testen wir den RegEx
                      foreach ($haystack as $needle) {
                          $matches = array();
                          $match   = '';
                          if (preg_match($pattern, $needle, $matches)) {
                              # es kann maximal ein Match geben :-)
                              $match = $matches[0];
                          }
                          $result[$needle] = $match;
                      }

                  # und schauen uns das Ergebnis an:
                      echo "<pre>\n";
                      foreach($result as $key => $value) {
                          echo $key, " => ", $value, "\n";
                      }
                      echo "</pre>\n";
                      /*
                          gibt folgendes aus:
                              abcd => abcd
                              abCd => abCd
                              abCD =>
                              abcD =>
                      */

                  
                  >   
                  > Passt!  
                  >   
                  > Zusätzlich gilt, dass innerhalb eines Subpatterns die Änderung nur für das Subpattern gilt. Über diese Schiene kannst Du ebenfalls unterschiedliche Optionen nutzen.  
                    
                  Sehr schön! Mir gefällt dein Beispiel mit der Stecknadel im Heuhaufen. :-)  
                    
                  Ob man nun bei Verwendung von Set und Unset (?i) oder ?i: zum Einschalten und (?-i) oder ?-i zum Ausschalten verwendet, ist aber Jacke wie Hose, oder?  
                    
                  Schöne Grüße vom Willi
                  
                  1. Mir gefällt dein Beispiel mit der Stecknadel im Heuhaufen. :-)

                    Huch, ist ja anscheinend gar nicht von dir.

          2. Hi!

            http://www.php.net/manual/en/regexp.reference.internal-options.php
            Spannende Zusatzfrage:
            Wie schaltet man denn caseless wieder aus, wenn man es mit dem Inline-Modifier mitten im Muster eingeschaltt hat, es aber nicht bis zum Ende gelten soll?
            Das steht auf der verlinkten Seite beschrieben.
            Wo bitte? Ich bin wohl leider zu blind, es zu finden.

            Da steht gleich unter der Tabelle, dass man mit - eine Option ausschalten kann. Ob man das beliebig hin- und herschalten kann, ist nicht wirklich relevant, da man mindestens mit Subpattern seine Reichweite beschränken kann.

            Lo!

      2. Guten Tag, Tom!

        Spannende Zusatzfrage:
        Wie schaltet man denn caseless wieder aus, wenn man es mit dem Inline-Modifier mitten im Muster eingeschaltt hat, es aber nicht bis zum Ende gelten soll?

        Wenn ich es richtig verstanden habe so:

        '~((?i)(foo)|bar)~'

        Oder so:

        '~(?i:foo?-i|bar)~'

        Ist das nun ein Toggle Switch, oder nur ein eindeutiger Schalter?

        ?i ein eindeutiger Schalter, ?i: und ?-i auch, wobei man beide zusammengenommen als Toggle Switch betrachten könnte.

        Schöne Grüße vom Willi