如何使用贪婪的+
使用积极的后视来匹配多个事件?
这有效:
(?<=\w)\w+
但我需要匹配所有\ w类似于:
(?<=\w+)\w+
第二个示例中的语法错误,但不起作用。
如何在多次出现时进行积极的后视匹配?
答案 0 :(得分:3)
一种非常脏的方法是反转字符串并使用正向前瞻。这是我在Javascript中使用的技巧(没有支持lookbehinds :()。
所以你必须这样做:
$string = 'This is a long string that must show this is what will happen';
$str_rev = strrev($string);
if (preg_match('!(si)(?=\w+)(\w+)!i', $str_rev, $matches)) {
print_r($matches);
}
上面的代码会在字符串中出现 THIS 时匹配 。第二个 \ w + 只是为了显示匹配的位置,在您的示例中不需要。
请记住,只有当你只使用一个方向来获得Lookbehind / aheads的贪婪时才能使用这种技术(例如你不能使用带有\ w +的lookbehind和带有\ w +的前瞻)
答案 1 :(得分:2)
您可能只想匹配它而没有任何外观,然后使用您的捕获组:
if (preg_match('~[abc]+([cde]+)~', $string, $matches)) {
echo $matches[1]; // will contain the [cde]+ part
}
答案 2 :(得分:2)
很抱歉地说,但是看起来没有量词!
中找到了这个Lookahead(?= regexp)可以匹配 任意的正则表达式,但是看起来很好 (?&lt; = fixed-regexp)仅适用于 固定宽度的正则表达式
我认为这对php正则表达式引擎也有效。