2012-02-16 3 views
1
preg_match("/\w+/", $s, $matches); 

위의 PHP 코드가 있습니다. 나는 그것을 문자열에있는 단어와 일치시키는 데 사용한다. 그것은 하나의 경우를 제외하고는 훌륭하게 작동합니다. ' w'와 일치하는 일부 이상한 문자와 일치

예 :

'This is a word'{'This','is','a','word'}

'Bös Tüb'{'Bös','Tüb'}

첫 번째 예는 작동과 일치해야 일치해야하지만, 두 번째는하지 않습니다. 대신 {'B','s','T','b'}을 반환하고 단어 문자로 öü을 볼 수 없습니다.

질문

가 어떻게 O 및 ü 일반적 이름에 사용되는 다른 문자와 일치하도록 (그들은 이상 할 수 있습니다, 이것은 독일어, 터키어 이름에 관한 것입니다)? 수동으로 모두 추가해야합니까 (/[a-zA-Z and all others as unicode]/)? 나는 당연히 언급하는 것을 잊었다으로

편집

단어 사이에 \n, \r' ' 문자가 많이 있습니다. 이것이 정규 표현식을 사용하는 이유입니다. 당신은 공백으로 분리해야하는 경우

+1

검색 유니 코드 PCRE 내 편집을 참조하십시오 – dynamic

답변

3

u 수정자는 유니 코드 문자를 처리 할 수 ​​있습니다. 그런 다음 utf8_decode()으로 일치 항목을 디코딩합니다.

$s = 'Bös Tüb'; 
preg_match("/\w+/u", $s, $matches); // use the 'u' modifier 
var_dump(utf8_decode($matches[0])); // outputs: Bös 
+0

그것이 내가 필요한 것입니다. 감사! \ u003A \ u0029 – Hidde

0

당신은 PHP를 좋아 FUNC 폭발 사용할 수 있습니다

상관없이 캐릭터 라인의 문자가 무엇인지
$some_string = 'test some words'; 
$words_arr = explode(' ', $some_string); 
var_dump($words_arr); 

, 스크립트가 작동합니다.

편집 : 당신이 시도 할 수 : 유니 코드에 대한

preg_match("/\w+/u", $s, $matches); 

합니다.

+0

: 단어 사이에 다른 단어가 아닌 문자가 많이 있습니다. 나는 그들을 걸러 내기가 어려운 입장에있다. – Hidde

+0

단어에 숫자가 있습니까? – mlinuxgada

+0

숫자가 없습니다. 인간이 단어를 쓰는 데 사용하는 '문자', 특히 이름. – Hidde

관련 문제