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

  • Christian Marquardt
    replied
    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

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


  • pega
    replied
    wenn ich die Umlaute ersetze (siehe unterer Block) stimmt alles:

    Leave a comment:


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

    Leave a comment:

Working...
X