重复正则表达式模式而不存储它

时间:2014-01-10 18:06:58

标签: php regex

我有一个正则表达式模式:[A-Ba-b0-9\-]\.

我想重复这个模式,所以我把它包在parens中:$repeatingPattern = '([A-Ba-b0-9\-]\.)*';

我有另一个我要捕获的正则表达式模式,所以我也把它包装在parens中:$capturePattern = '(stuff)';

问题是我只想捕获$capturePattern而不是$repeatingPattern

preg_match('/' . $repeatingPattern . $capturePattern . '/', $string, $matches)

换句话说,如果$repeatingPattern不影响$matches中存储的内容,我会更喜欢它。这可能吗?我知道重复正则表达式模式的唯一方法是使用parens,它也用于捕获。

3 个答案:

答案 0 :(得分:5)

您可以在第一个正则表达式中使用非捕获组:

$repeatingPattern = '(?:[A-Ba-b0-9\-]\.)*';

non-capturing group的语法是(?:...),它们分组但不会捕获。

答案 1 :(得分:3)

您可以使用non-capturing group: (?: ... )

答案 2 :(得分:0)

或者看后面:(?<=[A-Ba-b0-9\-]\.)。这样可以确保$repeatingPattern之前找到$capturePattern