正则表达式和 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'
我在处理这段代码时遇到了问题。它应该做的是获取一个字符串,按单词拆分它,然后对照字典检查它。但是,当字符串包含 "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'