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

时间:2012-11-21 21:48:05

标签: regex perl

在perl中,以下内容似乎会返回匹配 AND匹配分组的列表!

//g

规则:

  

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

如何获得不带分组的匹配列表?

更新

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

用于分组(不捕获)目的,例如写匹配“cat”或“dog”使用(?:cat|dog) 使用(cat|dog)而非(?:cat|dog)会在结果列表中添加任何“cat”或“dog”。

匹配括号:()

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

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

不匹配的括号:(?:)

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

结果:(badcat baddog)

2 个答案:

答案 0 :(得分:1)

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

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

while循环内$1保证是$regex的完整匹配。

答案 1 :(得分:1)

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