使用preg_match_all多次匹配一个字符

时间:2018-01-10 09:44:48

标签: php regex

我正在尝试查找另一个字符串中存在的子字符串列表。

这就是我的想法:

preg_match_all("/foot|ball|football/", "I like football", $results);

结果:

array(
    0 => array(
        0 => "foot",
        1 => "ball"
    )
)

https://regexr.com/3j0db

如您所见,它与football相匹配,但与football不匹配

我尝试了不同的标志,php选项和正则表达式的顺序,没有运气。

我无法让他们全部匹配。

我发现单个角色只能匹配一次。 它可以搜索“b​​acwards”,例如,如果我将正则表达式更改为/ball|foot|football/在脚前移动球,两者都将匹配但足球不会。

此外,我已尝试使用PCRE(php)和Javascript - 相同的结果。

我可以将它们全部匹配吗?

1 个答案:

答案 0 :(得分:1)

要匹配所有结果,您可以使用以下代码:

$allMatches = [];
$words = ['foot', 'ball', 'football'];

foreach ($words as $word) {
    if (preg_match("/$word/", 'I like football', $result)) {
        $allMatches = array_merge($allMatches, $result);
    }
}

print_r($allMatches);

这个问题是由于足球中足部和球的存在,所以你应该分别测试每个单词。