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
    1. function showWords() {
    2. echo "Treffer; Start; Länge<br />";
    3. $pattern = "~\b\w+\b~u";
    4. $text = "Kathe wurde gerne wahlen.";
    5. if (preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE)) {
    6. foreach ($matches[0] as $m) {
    7. echo $m[0]."; ".$m[1]."; ".mb_strlen($m[0], "utf-8")."<br />";
    8. }
    9. }
    10. }


    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