2012-05-09 6 views
0

私はそのようなエントリを持っています。 一般的な正規表現を使用したいと思います。を連結正規表現S +は

$temp=~ s/^\s+//g;  (1) 
$temp=~ s/^\w+[-]+//g; (2) 

私が(1)+(2)を使用する場合、それは動作します。それは私がもらう作品 :私が使用している場合

$temp=~ s/^\s+\w+[-]+//g; (3) 

(3)、私が手:HGTEZCWを、そしてRCBCVQE ...

私はそれはのように1行であることを行うことが可能であるかどうかを知りたいですこの結果:XYZABC------------HGTEZCW

1行に1 + 2を連結することができない理由を理解できません。 ------------また

XYZABC------------HGTEZCW 
    ZERTAE------------RCBCVQE 

、正規表現1削除スペースが、私はregex2を使用する場合、それはXYZABCを削除:

申し訳ありませんが、私のエントリでした。 しかし、組み合わせ(3)は動作しません。 私はこれを持っていますXYZABC------------HGTEZCW

@Timだから、常に各文字列の先頭に空白がありますか? はい

+0

だから、常に各文字列の先頭に空白のですか? –

答えて

1

あなたのregex(1)は、文字列の先頭から空白を削除します。だからあなたのサンプル文字列には何もしません。

Reges(2)は、文字列の先頭からすべての英数字とその後のダッシュを削除し、最後のダッシュに続くものをすべて返します。

両方を組み合わせると、一致する可能性のある空白\s+が存在しないため、正規表現が失敗するため、正規表現全体が失敗します。

これを修正するには、単に空白をオプションにします。また、あなたは括弧で-を囲む必要はありません。

$temp=~ s/^\s*\w+-+//g; 
+0

私のエントリは申し訳ありません: XYZABC ------------ HGTEZCW ZERTAE ------------ RCBCVQE また、正規表現1はスペースを削除しますが、私がregex2を使用すると、それはXYZABCを削除する必要があります------------、いいえ? – Patrick

+0

申し訳ありませんが私のentreiesは: – Patrick

+0

@パトリック:コメントにそれを入れようとするのではなく、元の質問を編集してください。ここでは書式設定が難しくなります。 –

0

これはトリックを行う必要があります。

$Str = ' 
    XYZABC------------HGTEZCW 
    ZERTAE------------RCBCVQE 
'; 

@Matches = ($Str =~ m#^.+-(\w+)$#mg); 

print join "\n",@Matches ; 
0

あなただけの各エントリの最後の7つの文字が必要な場合は、次の操作を行うことができます:

$temp =~ /.{7}$/; 
関連する問題