2013-11-24 83 views
0
$input = "žąsis su šešiolika žąsyčių"; 
preg_match_all("/\b(žąs\S*)/iu", $input, $output_array); 
print_r($output_array); 

返回一個很大的東西。我希望它同時返回「žąsis」和「žąsyčių」。似乎是一個簡單的問題,但我找不到一個簡單的答案。我應該編碼主體和模式好歹?..一種快速匹配utf-8字符串的方法

而且由意爲「一個大沒有」我的意思是空多維數組

Array ([0] => Array () [1] => Array ()) 
+0

PHP正在使用的PCRE庫中是否可能未啓用UTF-8支持? – cmbuckley

+0

[preg \ _match rule for utf-8]可能的重複(http://stackoverflow.com/questions/14511866/preg-match-rule-for-utf-8) –

+0

@cbuckley可能是。我應該如何檢查這從PHP? – August

回答

0

嘗試添加UTF8序列模式的開始:

$input = "žąsis su šešiolika žąsyčių"; 
preg_match_all("/(*UTF8)(žąs\S*)/iu", $input, $output_array); 
print_r($output_array); 

編輯

我測試了這個在PHP 5.2.17和5.3.20。我似乎沒有任何p當使用5.3.20時,roblems但是我在使用5.2.17時得到相同的空輸出。雖然我找不到任何解決此問題的文檔,但在刪除第一個\b(字邊界)時,問題似乎消失了。以下是輸出,PHP版本,加載擴展和源代碼的屏幕截圖(如果這不起作用,請確保您將文檔保存爲UTF8而不是Windows喜歡將其保存爲的任何文件):

enter image description here

+0

根本不返回任何東西。 – August

+0

我以爲你說過呢...不是嗎?無論如何,如果您想將您的環境與我的環境進行比較,請參閱最新版本的一些(可能的)調試信息。 – jerdiggity

+0

不,刪除\ b有竅門。雖然我不知道爲什麼:))你真棒jerediggity謝謝! – August