Announcement

Collapse
No announcement yet.

Falscher Offset bei Wörtern mit Umlauten im Regex-Ergebnis

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Falscher Offset bei Wörtern mit Umlauten im Regex-Ergebnis

    Warum liefert dieser Regex bei Umlauten einen um jeweils ein Zeichen verschobenen Offset? Den Unicode-Modifier habe ich im Pattern.
    PHP Code:
    function showWords() {
        echo 
    "Treffer; Start; Länge<br />";
        
    $pattern "~\b\w+\b~u";
        
    $text "Käthe würde gerne wählen.";
        if (
    preg_match_all($pattern$text$matchesPREG_OFFSET_CAPTURE)) {
            foreach (
    $matches[0] as $m) {
                echo 
    $m[0]."; ".$m[1]."; ".mb_strlen($m[0], "utf-8")."<br />";
            }
        }


    Treffer; Start; Länge
    Käthe; 0; 5
    würde; 7; 5
    gerne; 14; 5
    wählen; 20; 6

    Treffer; Start; Länge
    Kathe; 0; 5
    wurde; 6; 5
    gerne; 12; 5
    wahlen; 18; 6
    Peter

  • #2
    Vermutlich wird das Leerzeichen mitgenommen. Gruppieren ~\b\(w+)\b~u
    Christian

    Comment


    • #3
      wenn ich die Umlaute ersetze (siehe unterer Block) stimmt alles:
      Peter

      Comment


      • #4
        Interessant
        Mal das w mit [0-9a-zA-ZÜÄÖüäöß]
        ersetzen
        Christian

        Comment


        • #5
          alles schon probiert (auch \p{L}). Bei diesem Tool https://regex101.com/r/cfI3Ac/1 funktioniert es.
          Peter

          Comment


          • #6
            echo "Treffer; Start; Länge<br>";
            $pattern = "~\b\w+\b~u";
            $text = "Käthe würde gerne wählen.";
            if (preg_match_all($pattern,utf8_encode($text), $matches, PREG_OFFSET_CAPTURE)) {
            foreach ($matches[0] as $m) {
            echo $m[0]."; ".$m[1]."; ".mb_strlen($m[0], "utf-8")."<br />";
            }
            }
            äöü sind nicht UTF-8

            UTF-8:
            Käthe würde gerne wählen
            Christian

            Comment

            Working...
            X