0

文字列からいくつかの部分文字列をフィルタリングしたい:

.
.
th>Di, -12 ;0907<th
th>Mi, -44 ;1007<th
th>Do, -66 ;1107<th
.
.

私のperlスクリプトは次のとおりです。

.
.
my (@d,$h,$s);
@d=$h=~/(th>(Di|Mi|Do), -\d\d ;\d\d\d\d<th)/igs;
foreach $s (@d)
   {print  "$s\n";};  

Output is:
th>Di, -12 ;0907<th
Di
th>Mi, -44 ;1007<th
Mi
th>Do, -66 ;1107<th
Do

私の問題、私はこの出力が必要です:

th>Di, -12 ;0907<th
th>Mi, -44 ;1007<th
th>Do, -66 ;1107<th

正規表現内で変更せずに一致をフィルタリングするにはどうすればよいですか?

4

2 に答える 2

4

?:最も簡単な方法は、正規表現演算子を使用してキャプチャ グループを非キャプチャ グループに変換することです。

@d=$h=~/(th>(?:Di|Mi|Do), -\d\d ;\d\d\d\d<th)/igs;

実際には、 : と?:一緒に使用されることが多く|、代替の範囲を制限するには、括弧を使用する必要がありますが、主な効果 (キャプチャ) も活用する必要はありません。

于 2013-09-06T21:13:13.733 に答える