-1

在 perl 中,以下似乎返回匹配列表和匹配分组!

//g

规则:

在列表上下文中,//g返回匹配分组的列表,或者如果没有分组,则返回整个正则表达式的匹配列表

如何获得没有分组的匹配列表?

更新:

在 perl 中,正则表达式似乎返回所有与正则表达式部分()匹配的内容,以及与整个术语匹配的内容。

出于分组(而不是捕获)目的,例如编写匹配“猫”或“狗”使用(?:cat|dog).
使用(cat|dog)and not(?:cat|dog)会将任何出现的“cat”或“dog”添加到结果列表中。

匹配括号: ( )

"badcat and baddog" =~ /bad(cat|dog)/g 

结果:(badcat baddog cat dog)
单个cat并被dog添加到结果列表中,因为它们包含在匹配的括号中

不匹配的括号: (?: )

 "badcat and baddog" =~ /bad(?:cat|dog)/g 

结果是:(badcat baddog)

4

2 回答 2

1

如果您有一个可能包含分组的正则表达式,但您只想匹配整个正则表达式,请执行以下操作:

my $regex = qr/some regex (with) (groupings)/;
my @matches;
while ($string =~ m/($regex)/g) { push(@matches, $1) }

while循环内部$1保证是$regex.

于 2012-11-21T22:43:07.847 回答
1

如果您需要用于其他目的的括号,您可以使用非捕获的,(?: ... )

于 2012-11-22T09:23:44.707 回答