我正试图在下面得到结果,但我不能,有人可以给我一个想法吗?
我的鳕鱼:
$string ='ZAMM Et a est hac pid pid sit amet, lacus nisi ZPPP scelerisque sagittis montes, porttitor ut arcu ZAMM tincidunt cursus eu amet nunc ZAMM c ac nunc, et pid pellentesque amet, ZSSS m urna scelerisque in vut';
if(preg_match_all("/ZAMM.*/", $string, $matches)) {
foreach($matches[0] as $match){
echo $match;
echo "<br />";
}
}
预期结果:
1: ZAMM Et a est hac pid pid sit amet, lacus nisi ZPPP scelerisque sagittis montes, porttitor ut arcu ZAMM tincidunt cursus eu amet nunc ZAMM c ac nunc, et pid pellentesque amet, ZSSS m urna scelerisque in vut
2: ZAMM tincidunt cursus eu amet nunc ZAMM c ac nunc, et pid pellentesque amet, ZSSS m urna scelerisque in vut
3: ZAMM c ac nunc, et pid pellentesque amet, ZSSS m urna scelerisque in vut
答案 0 :(得分:1)
/ZAMM(.(?!ZAMM))*/
获取 ZAMM 后面没有的所有后续字符。这称为 Negative Lookahead 。
答案 1 :(得分:1)
你需要使用预测来做这种事情。您需要的模式如下所示:
/ZAMM.*?(?=(ZAMM|$))/
这就是正则表达式开始变得复杂的地方。这个想法是你匹配一个字符串,但也在字符串中向前看以找到匹配的终点。您可以在此处找到有关此和其他高级正则表达式语法的更多信息:http://www.regular-expressions.info/refadv.html
您还需要通过添加问号将现有.*
变为“非贪婪”模式,否则它将在第一次匹配时保持到字符串的末尾(因为它是已经做了。)
希望有所帮助。
答案 2 :(得分:0)
.*
是“贪婪的”,所以第一个匹配将消耗字符串的其余部分。请尝试使用.*?
,以使其不贪婪。