2016-06-07 8 views
0

У меня возникли проблемы с этим фрагментом кода. То, что он должен делать, это взять строку, разбить ее по слову, а затем проверить ее на словарь. Однако, когда строка содержит «Umlaut» ÄäÖöÜü, она разбивает ее там.Regexp и pspell_check с UTF-8 (Umlaute)

Я уверен, что проблема в [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

Вам просто нужно ' '/ \ р {L} +/у ' –

+0

@ WiktorStribiżew спасибо, похоже, работает, позаботьтесь о публикации в качестве ответа? Так как я никогда не воспринимаю эти вещи как хорошие рекомендации по чтению? – Shaeldon

ответ

1

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

'/\p{L}+/u' 

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

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

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

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

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