正则表达式和 UTF-8(变音符号)的pspell_check



我在这段代码上遇到了问题。它应该做的是获取一个字符串,按单词拆分,然后根据字典进行检查。但是,当字符串包含"Umlaut"ÄäÖöÜü时,它会将其拆分为"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 字符串。

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

'/bp{L}+b/u'

如果您有音调符号,还要添加p{M}

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

最新更新