正则表达式和 pspell_check 与 UTF-8(元音变音)

Regexp and pspell_check with UTF-8 (Umlaute)

我在处理这段代码时遇到了问题。它应该做的是获取一个字符串,按单词拆分它,然后对照字典检查它。但是,当字符串包含 "Umlaut" ÄäÖöÜü 时,它会将其拆分到那里。

我很确定问题出在 [A-ZäöüÄÖÜ\'] 看来我包含的特殊字符有误,但是怎么办?

$string = "Rechtschreibprüfung";      
preg_match_all("/[A-ZäöüÄÖÜ\']{1,16}/i", $string, $words);
for ($i = 0; $i < count($words[0]); ++$i) {
    if (!pspell_check($pspell_link, $words[0][$i])) {
        $array[] = $words[0][$i];            
    }
}

结果:

$array[0] = Rechtschreibprü"
$array[1] = "fung"

要匹配一大块 Unicode 字母,您可以使用

'/\p{L}+/u'

\p{L} 匹配任何 Unicode 字母,+ 匹配前面子模式的一个或多个出现,/u 修饰符将模式和字符串视为 Unicode 字符串。

要只匹配整个单词,请使用单词边界:

'/\b\p{L}+\b/u'

如果您有变音符号,请添加 \p{M}:

'/\b[\p{M}\p{L}]+\b/u'