2010-10-26 216 views
0

所以我試圖在文字牆上匹配單詞並在比賽前後返回幾個單詞。一切正常,但我想問問是否有任何方法修改它,因此它會尋找類似的詞。嗯,讓我告訴你一個例子:PHP - 快速正則表達式問題

preg_match_all('/(?:\b(\w+\s+)\{1,5})?.*(pripravená)(?:(\s+){1,2}\b.{1,10})?/u', $item, $res[$file]); 

此代碼返回比賽,但我想它來修改它,以便

preg_match_all('/(?:\b(\w+\s+)\{1,5})?.*(pripravena)(?:(\s+){1,2}\b.{1,10})?/u', $item, $res[$file]); 

也將返回匹配。它的斯洛伐克語言,我嘗試了unicode字符的範圍,並\ p {Sk}(和其他幾個),但無濟於事。也許我只是把它放在錯誤的地方,我不知道...

是這樣的可能嗎?

任何幫助表示讚賞

回答

0

你可以使用strtr()剝離出來的口音:一個很好的例子,請參見PHP手冊 - http://php.net/manual/en/function.strtr.php

$addr = strtr($addr, "äåö", "aao"); 

你還是會需要指定所有相關的字符,但它會更容易比使用正則表達式來做到這一點。

0

(pripraven[áa])(pripravena\p{M}*),或者更可能的是,這些方法的某種組合。

我不知道任何其他更簡潔的方式,指定「在我當前的語言環境中與'a'類似的所有拉丁語-1元音。

+0

是的,這會起作用,但它不會像[čc] u [čc] oriedka這樣的詞來解決問題,我必須映射任何可以像這樣使用的字符。也許有一個更簡單的解決方案,但仍然 - 謝謝:) – realshadow 2010-10-26 13:18:47

+0

@realshadow,當然你會寫一個函數,替代你,例如'preg_map_slovak( 'čučoriedka')' – splash 2010-10-26 13:27:29

1

我不知道是否有「忽略重音」開關。但是,你可能喜歡的東西取代您的搜索查詢:

$query = 'pripravená'; 
$query = preg_replace(
    array('=[áàâa]=i','=[óòôo]=i','=[úùûu]=i'), 
    array('[áàâa]' , '[óòôo]' , '[úùûu]' ), 
    $query 
); 
preg_match_all('/(?:\b(\w+\s+)\{1,5})?.*('.$query.')(?:(\s+){1,2}\b.{1,10})?/u', $item, $res[$file]); 

這將您的'pripravená'查詢轉換成'pripraven[áàâa]'