Regexp и pspell_check с 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"

0

Решение

Чтобы сопоставить кусок букв Unicode, вы можете использовать

'/\p{L}+/u'

\p{L} соответствует любой букве Unicode, + совпадает с одним или несколькими экземплярами предыдущего подшаблона и /u Модификатор обрабатывает шаблон и строку как строки Unicode.

Чтобы соответствовать только целым словам, используйте границы слов:

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

Если у вас есть диакритические знаки, также добавьте \p{M}:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector