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
    function showWords() {
                echo "Treffer; Start; Länge<br />";
                $pattern = "~\b\w+\b~u";
                $text = "Kathe wurde gerne wahlen.";
                if (preg_match_all($pattern, $text, $matches, PREG_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