[REGEX] Probleme mit Umlaute

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

  • [REGEX] Probleme mit Umlaute

    Hallo Leute,

    Ich hab versucht mit preg_match alle Buchstaben/Zahlen UND Umlaute und éàè etc. (also hex C0-FF bzw. octal 300-377 zu identifizieren.
    :
    $pattern = "/(\w|[\300-\377])+/";

    oder

    $pattern = "/(\w|[\xC0-\xFF])+/";

    preg_match($pattern, $string);

    scheinen nicht zu funktionieren.

    Ich glaube, dass Problem liegt bei beim Teil nach dem '|'.
    Wenn ich $pattern = "/[\300-377]+/" benutze, scheint alles gut zu sein (natuerlich ohne A-Za-z0-9) ausser es matched auch '¢' und '§' u.a.

    Kann mir jemand helfen?

    Vielen Dank im voraus

    Protonman

  • #2
    Dein Problem ist recht einfach zu erklären.

    PHP unterstützt zwei und dreistellige oktale escapes - bis einschließlich \377. Soweit so gut, das hast du. Also wo ist der Fehler? Dein Escape funktioniert, sagst du. Okay.

    Aber was machst du genau:

    (\w|[\300-\377])+

    du hast hier eine Alternation in einer Klammer - diese muss MINDESTENS 1x zutreffen damit die RegExp. true ergeben kann.

    Das heißt, wenn du sowas hast wie aäe würde er dir im endeffekt nur das e matchen, da die einfangende Klammer ja mehrfach aufgerufen wird und somit der letzte Treffer überschrieben wird.

    Was du brauchst ist einfach ne stinknormale Zeichenklasse wie du sie schon hast. Hau die Alternation da raus und pack das + mit in die Klammern.

    Also:

    ([\300-\377\w]+)



    Online: http://pcre.nophia.de/evaluate/9e5c4...dex.php#output


    (Beachte dass ich ein ein zweites \ vor den 1. oktalen Escape hängen musste da sonst die Website macken macht
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Danke viel mals, Shurakai.

      Doch etwas funktioniert noch nicht richtig. Das pattern matched nicht nur octals von 300-377 sondern alle von 240-377, obwohle \300-\377 steht.
      Z.B.:¢ (octal 242), © (octal 251) oder § (octal 247) dürfen nicht gematched werden.

      Kann du oder irgend jemand mir nochmals helfen?

      Vielen Dank im Voraus

      Protonman

      Kommentar


      • #4
        preg_match matched mehr als es soll

        Vielen dank an Shurakai für die Antwort auf meinen letzten Post

        Doch etwas funktioniert noch nicht richtig. Das pattern matched nicht nur octals von 300-377 sondern alle von 240-377, obwohl \300-\377 steht.
        Z.B.:¢ (octal 242), © (octal 251) oder § (octal 247) dürfen nicht gematched werden.

        Kann mir jemand helfen?

        Vielen Dank im Voraus

        Protonman

        Kommentar

        Lädt...
        X