2010-08-24 39 views
1

我的字符串是外語。我使用以下正則表達式:我修飾符不適用於外語?

$str = 'մի քանի Բառ ձեր մասին'; 
$word = 'բառ'; 

$cont = preg_match_all("/.{0,80}[^\s]*?".preg_quote($word)."[^\s]*?.{0,80}/si",$str,$matched); 
print_r($matched);//returns Array ([0] => Array ()) .. 

...但如果我設置:

$word = "Բառ";//returns Array ([0] => Array ([0] => մի քանի Բառ ձեր մասին)) 

我能做些什麼,以便能夠使用我修改外語嗎?

+0

這是什麼代碼的目的是什麼?你是否試圖從文本中提取單詞加周圍的單詞? – Gumbo 2010-08-24 09:54:23

+0

@Gumbo。如果字符串中有子字,我會嘗試提取單詞和周圍的單詞。你怎麼看待這樣的解決方案? – Simon 2010-08-24 09:57:16

+0

我寧願將文本分成單詞,找到包含或包含所需單詞的單詞,然後獲取周圍的單詞。或者,如果你想使用'preg_match_all',只需搜索想要的單詞並使用'PREG_OFFSET_CAPTURE'標誌來獲取'substr'的​​偏移量(參見http://stackoverflow.com/questions/3306513)。 – Gumbo 2010-08-24 10:09:21

回答

5

嘗試添加u修改:

$cont = preg_match_all("/.{0,80}[^\s]*?".preg_quote($word)."[^\s]*?.{0,80}/siu",$str,$matched); 
+3

完美。非常感謝。你能解釋爲什麼你的修飾語對語言有影響嗎?據我所知,它只會反轉貪婪? – Simon 2010-08-24 09:55:35

+4

@Syom:「U」(大寫)用於非貪婪匹配,「u」(小寫)用於將模式解釋爲UTF-8編碼。請參閱http://php.net/reference.pcre.pattern.modifiers。 – Gumbo 2010-08-24 10:14:21