我有一个以分号分隔的单词列表(大约180,000个单词),如下所示:
;test;dog;cat;hello;whatever;
如何使用正则表达式获取包含特定子字符串的所有单词的aray? 例如 - 如何让所有单词包含字母 a ? 我试过这个:
preg_match_all('#(?:;).*a.*(?:;)#u', $one_line, $matches);
^但它似乎没有产生正确的结果?...我做错了什么?
答案 0 :(得分:6)
得到所有单词帽子包含字母a?
使用preg_match_all
方法从索引1获取匹配的组。
(\w*a\w*)
如果分号之间有多个单词,请按照@ anubhava在以下评论中的建议尝试以下正则表达式。
[^;a]*a[^;]*
答案 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'。我想我会指出,假设正则表达式是必要的并不一定总是有益或最有帮助的