我有一个正则表达式模式:[A-Ba-b0-9\-]\.
我想重复这个模式,所以我把它包在parens中:$repeatingPattern = '([A-Ba-b0-9\-]\.)*';
我有另一个我要捕获的正则表达式模式,所以我也把它包装在parens中:$capturePattern = '(stuff)';
问题是我只想捕获$capturePattern
而不是$repeatingPattern
:
preg_match('/' . $repeatingPattern . $capturePattern . '/', $string, $matches)
换句话说,如果$repeatingPattern
不影响$matches
中存储的内容,我会更喜欢它。这可能吗?我知道重复正则表达式模式的唯一方法是使用parens,它也用于捕获。
答案 0 :(得分:5)
您可以在第一个正则表达式中使用非捕获组:
$repeatingPattern = '(?:[A-Ba-b0-9\-]\.)*';
non-capturing group
的语法是(?:...)
,它们分组但不会捕获。
答案 1 :(得分:3)
答案 2 :(得分:0)
或者看后面:(?<=[A-Ba-b0-9\-]\.)
。这样可以确保$repeatingPattern
之前找到$capturePattern
。