PHP - 快速正则表达式问题

时间:2010-10-26 13:10:42

标签: php regex

所以我试图在文本墙上匹配单词,并在比赛前后返回几个单词。一切正常,但我想问是否有任何方法可以修改它,所以它会寻找类似的单词。嗯,让我给你举个例子:

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}(以及其他几个),但无济于事。也许我只是把它放在错误的地方,我不知道......

这样的事情可能吗?

感谢任何帮助

3 个答案:

答案 0 :(得分: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]'

答案 1 :(得分:0)

(pripraven[áa])(pripravena\p{M}*)或更可能是这些方法的某种组合。

我不知道在我当前的语言环境中指定“与'a'类似的所有Latin-1元音”的任何其他更简洁的方法。

答案 2 :(得分:0)

您可以使用strtr()删除重音:请参阅PHP手册页以获取一个好例子 - http://php.net/manual/en/function.strtr.php

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

您仍然需要指定所有相关字符,但这比使用正则表达式更容易。