-1

perlでは、以下は一致と一致したグループのリストを返すようです!

//g

ルール:

リストコンテキストで//gは、一致するグループのリストを返します。グループがない場合は、正規表現全体に一致するリストを返します。

グループ化せずに一致のリストを取得するにはどうすればよいですか?

アップデート:

perlでは、正規表現は、囲まれた正規表現部分と一致するものすべてに()加えて、用語全体と一致するものを返すようです。

グループ化(キャプチャではない)の目的で、たとえば、一致する「猫」または「犬」を作成するには、を使用します(?:cat|dog)。and notを
使用すると、「cat」または「dog」の出現が結果リストに追加されます。(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 に答える