尝试对分号分隔的单词列表运行正则表达式

时间:2014-07-11 20:01:29

标签: php regex pcre

我有一个以分号分隔的单词列表(大约180,000个单词),如下所示:

;test;dog;cat;hello;whatever;

如何使用正则表达式获取包含特定子字符串的所有单词的aray? 例如 - 如何让所有单词包含字母 a ? 我试过这个:

preg_match_all('#(?:;).*a.*(?:;)#u', $one_line, $matches);

^但它似乎没有产生正确的结果?...我做错了什么?

3 个答案:

答案 0 :(得分:6)

  

得到所有单词帽子包含字母a?

使用preg_match_all方法从索引1获取匹配的组。

(\w*a\w*)

Online demo


如果分号之间有多个单词,请按照@ anubhava在以下评论中的建议尝试以下正则表达式。

[^;a]*a[^;]*

Online demo

答案 1 :(得分:2)

我个人倾向于两步...首先,将字符串分解为数组:

$entries = explode (";", $yourstring);

然后你可以对数组中的每个组件做一个干净的正则表达式,而不必担心半冒号:

$matches = preg_grep ("/a/" , $entries);

根据我的经验,尝试将分隔符与其他正则表达式包括在一起会使事情变得相当复杂。

答案 2 :(得分:0)

Braj对于正则表达式示例是正确的,但我想提出另一种方法来执行此操作可能是用分号分隔字符串。

请使用以下内容:

array explode ( string $delimiter , string $string [, int $limit ] )

- 返回一个字符串数组,每个字符串都是一个字符串的子字符串,通过在字符串分隔符形成的边界上将其拆分而形成。

然后你可以简单地检查每个字符串是否包含字母a。我相信在某些情况下,这可能会更有效率。如果您正在寻找包含' a' aa'和' aaa'的字词,那么它可能会更有效率。您可以将字符串拆分为数组,然后检查每个字符串是否包含' a'。然后你可以缩短你需要检查的字符串' aa'和' aaa'。我想我会指出,假设正则表达式是必要的并不一定总是有益或最有帮助的