2010-10-26 93 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]'