2014-01-08 3 views
2

utf-8 문자로 시작하거나 끝나는 문자열에서 단어를 검색 할 때 문제가 발생합니다. 일치하는 단어를 찾을 수 없습니다. 단어가 utf-8 문자로 시작되거나 끝나지 않으면 모든 것이 정상적으로 작동합니다. 코드 : 당신이 볼 수있는 결과에첫 번째 또는 마지막 문자가 utf8 인 경우 preg_match_all이 실패합니다.

$str= 'String: ābols, abols, abŌls, abōls, aboļŠ, aboĻs'; 
$find = array('ābols', 'abols', 'abōls', 'aboļš', 'aboļs'); 
preg_match_all("/(*UTF8)\b(" . implode($find,"|") . ")\b/i", $str, $matches); 

- UTF-8 문자로 시작 "단어"찾을 수 캔트 : 이미지 결과에 : 나는`잘못하고 무엇 http://i.stack.imgur.com/qZku3.png

? 감사합니다. .

답변

2

"utf-8"문자로 시작하거나 끝나는 단어가 보이지 않는 이유는 간단합니다. \b은 기본적으로 단어 경계 인 문자 사이의 한도 인 단어 경계입니다. \w (또는 [a-zA-Z0-9_]) 및 다른 문자.

\b의 동작을 변경하려면 (모든 숫자와 은하계의 모든 문자와 함께 작동하려면) u 수정자를 사용해야합니다.

preg_match_all("/(*UTF8)\b(" . implode($find,"|") . ")\b/iu", $str, $matches); 

또 다른 방법은 lookarounds으로 단어 경계를 대체하는 것입니다 :

preg_match_all("/(*UTF8)(?<=^|[\s\pP])(" . implode($find,"|") . ")(?=[\s\pP]|$)/i", $str, $matches); 
+0

이 내가 필요한 것입니다이 수정으로 \w는 이제 모든 문자와 모든 번호가 포함되어 있습니다. 큰 감사합니다! – Artis

+0

@ user3101318 :이 경우에는 답변을 수락 된 것으로 확인해야합니다. –

관련 문제