在某些单词之间和之后找到随机文本

Find random texts in between and after certain words

我有一个包含随机数量单词的字符串,我需要找到单词 1 和 2 之间以及单词 2 之后的随机文本。我设法得到了单词 1 和 2 之间的随机文本,但是在单词 2 之后,我只得到了随机文本的一个字符。请看看我的代码,让我知道我做错了什么。

$string = 'one randomText two randomText';
preg_match_all('/one\s+(.+?)\s+two\s+(.+?)/i', $string, $matches);
print_r($matches);

预期输出:

Array ( [0] => Array ( [0] => one randomText two randomText ) [1] => Array ( [0] => randomText ) [2] => Array ( [0] => randomText ) );

实际输出:

Array ( [0] => Array ( [0] => one randomText two r ) [1] => Array ( [0] => randomText ) [2] => Array ( [0] => r ) );

您可以使用:

preg_match_all('/one\s+(.+?)\s+two\s+(.+)/i', $string, $matches);

最后这里不需要使用非贪婪(惰性)量词,否则会尽可能少地匹配(多于一个),因此只匹配 r.