试图对分号分隔的单词列表运行regex


trying to run regex against semi-colon separated list of words

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

;test;dog;cat;hello;whatever;

我如何得到包含特定子字符串使用正则表达式的所有单词的数组?例如,我如何获得包含字母a的所有单词?我试过了:

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

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

获取包含字母a的所有单词?

使用preg_match_all方法从索引1中获得匹配的组

('w*a'w*)

在线演示

如果分号之间有多个单词,请按照下面注释中@ anubhava的建议尝试下面的regex。

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

在线演示

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

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

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

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

尝试将分隔符与其他正则表达式一起包含在我的经验中,可以使事情变得非常复杂。

Braj对于正则表达式示例是正确的,但是我想提出另一种方法来做到这一点,可能是通过分号分割字符串。

请像这样使用:

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

—返回一个字符串数组,每个字符串都是字符串的子字符串,由字符串分隔符形成的边界将其分割。

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