0

私はこの入力を持っています:

AB2.HYNN.KABCDSEG.L000.G0001V00
AB2.HYNN.GABCDSEG.L000.G0005V00

文字列で終わるものをすべて削除したいと思いGXXXXVXXます。

このコードを使用する場合:

$result  =~ s/\.G.*V.*$//g;
print "$result \n";

結果は次のとおりです。

AB2.HYNN.KABCDSEG.L000
AB2.HYNN

正規表現が見つけるたびに、".G"それが空白で削除されるようです。理解できない。

これが欲しい:

AB2.HYNN.KABCDSEG.L000
AB2.HYNN.GABCDSEG.L000

どうすれば正規表現でこれを行うことができますか?

4

2 に答える 2

0
$result =~ s/\.G\d+V\d+//g;

与えられた入力で動作します。

于 2012-05-04T16:27:23.277 に答える
0

アップデート:

コメントで話した後、最終的な解決策は次のとおりです。

s/\.G\w+V\w+$//;

あなたの正規表現で:

s/\.G.*V.*$//g;

それら.*は貪欲で、可能な限り一致します。V唯一の要件は、どこかの後に a が必要であることです。そのため、最初に見つかっ.Gた文字列から切り捨てられます。一致が発生すると残りの文字列が削除されるため、ここでは修飾子は必要ありません。修飾子のない改行と一致しないため、改行がない限り。.GV/g./s

于 2012-05-04T16:32:42.013 に答える