2016-06-07 1 views
0

이 코드 조각에 문제가 있습니다. 그것이해야 할 일은 문자열을 가져 와서 단어로 나눈 다음 사전에 대해 확인하는 것입니다. 그러나 문자열에 "Umlaut"가 포함되어 있으면 거기에서 분리됩니다.UTF-8 (Umlaute)으로 Regexp 및 pspell_check

나는 꽤 문제가 [A-ZäöüÄÖÜ\'] 인 것 같아서, 나는 특별한 charackters를 잘못 포함하고있는 것 같지만 어떻게 될까?

$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

를 '/ \ P {L} +/U '' –

+0

@ WiktorStribiżew 덕분에 작동하는 것처럼 보였으므로 답변을 게시 하시겠습니까? 나는이 책을 결코 좋은 독서법으로 이해하지 못하기 때문에? – Shaeldon

답변

1

유니 코드 문자의 덩어리에 맞게, 당신은 + 앞의 하나 또는 그 이상의 occurrenes 일치,

'/\p{L}+/u' 

\p{L} 일치하는 모든 유니 코드 문자를 사용할 수 있습니다 하위 패턴과 /u 수정자는 패턴과 문자열을 유니 코드 문자열로 처리합니다.

전체 단어 만, 사용 단어 경계와 일치하려면 : 당신이 분음 부호가있는 경우

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

도 추가 \p{M} : 당신은 그냥`필요

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