PCRE: Alternative in Lookbehind-Assertion

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

  • PCRE: Alternative in Lookbehind-Assertion

    Hallo,

    ich möchte mit preg_match einen Ausdruck finden, vor dem entweder
    • nichts (^ wäre sozusagen das Gesuchte)
    • ein bestimmtes Zeichen (in diesem Fall chr(9))

    steht. Wenn nur eine Möglichkeit gesucht würde, ließe sich das ja gut mit einer Lookbehind-Assertion machen:
    Code:
    (?<=[\x09]{1})
    Wenn andere Zeichen vor dem gesuchten Ausdruck stehen als chr(9), soll der reguläre Ausdruck nicht zutreffen.

    Wie könnte man die oben dargestellte Assertion erweitern, damit auch der Stringanfang (^) passt und nicht nur chr(9) oder geht das vielleicht gar nicht, da die Assertion ja "fixed-width" ist?

    Gruß und danke bereits im Voraus!
    MicroMumpitz

  • #2
    Code:
    (^|\x09)gesuchterausdruck
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Zitat von micromumpitz Beitrag anzeigen
      Hallo,

      ich möchte mit preg_match einen Ausdruck finden, vor dem entweder
      • nichts (^ wäre sozusagen das Gesuchte)
      • ein bestimmtes Zeichen (in diesem Fall chr(9))

      steht. Wenn nur eine Möglichkeit gesucht würde, ließe sich das ja gut mit einer Lookbehind-Assertion machen:
      Code:
      (?<=[\x09]{1})
      Wenn andere Zeichen vor dem gesuchten Ausdruck stehen als chr(9), soll der reguläre Ausdruck nicht zutreffen.

      Wie könnte man die oben dargestellte Assertion erweitern, damit auch der Stringanfang (^) passt und nicht nur chr(9) ...
      PHP-Code:
      $pcre '/(?<=\A|\x09)lsmf/';
      $hay = array (
          
      "\x09lsmf",
          
      "lsmf",
          
      "xlsmf",
      );

      foreach (
      $hay as $haystack) {
        if (
      preg_match($pcre$haystack$hits)) {
            
      var_dump('$hits: %s'$hits);
        }
        else {
            echo(
      '--no hit--');
        }

      ... oder geht das vielleicht gar nicht, da die Assertion ja "fixed-width" ist?
      Wie du siehst, geht es. ;-)
      Es gibt ein paar Ausnahmen von der "fixed-width-with-lookbehind-Assertion"-Regel.
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        Danke! Lösung gefunden!

        Hallo fireweasel,

        danke für die Antwort! Das ist genau das, wonach ich gesucht hatte!

        Gruß,
        MicroMumpitz

        Kommentar

        Lädt...
        X