正则表达式捕获记录PHP 2

时间:2013-04-19 21:29:25

标签: php regex string

我正试图在下面得到结果,但我不能,有人可以给我一个想法吗?

我的鳕鱼:

$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

3 个答案:

答案 0 :(得分:1)

/ZAMM(.(?!ZAMM))*/

获取 ZAMM 后面没有的所有后续字符。这称为 Negative Lookahead

答案 1 :(得分:1)

你需要使用预测来做这种事情。您需要的模式如下所示:

/ZAMM.*?(?=(ZAMM|$))/

这就是正则表达式开始变得复杂的地方。这个想法是你匹配一个字符串,但也在字符串中向前看以找到匹配的终点。您可以在此处找到有关此和其他高级正则表达式语法的更多信息:http://www.regular-expressions.info/refadv.html

您还需要通过添加问号将现有.*变为“非贪婪”模式,否则它将在第一次匹配时保持到字符串的末尾(因为它是已经做了。)

希望有所帮助。

答案 2 :(得分:0)

.*是“贪婪的”,所以第一个匹配将消耗字符串的其余部分。请尝试使用.*?,以使其不贪婪。