2017-04-03 17 views
1

正規表現を使用して基本プログラムを作成しました。 しかし、マッチした部分の代わりに行全体が返されています。パターン一致のテキストのみを抽出する

番号を抽出したいだけです。

use strict; 
use warnings; 

my $line = "ABMA 1234"; 
$line =~ /(\s)(\d){4}/; 

print $line; #prints *ABMA 1234* 

正規表現は間違っていますか?

答えて

2

あなたは対応する値との正確な値を置き換えることができます。あなたはテキストを削除していません\w;あなたは、新しい文字列に値を格納する場合

use strict; 
use warnings; 

my $line = "ABMA 1234"; 
$line=~s/([A-z]*)\s+(\d+)/$2/; 

print $line; #prints only 1234 

(my $newstring = $line)=~s/([A-z]*)\s+(\d+)/$2/; 

print $newstring; #prints only 1234 

はこれを試してみてください。

+0

文字クラス '[A-z]'には、大文字と小文字の英字だけでなく、 '['、 '\'、 ']'、 '^'、 '_'、' \ '非ASCII文字のマッチングを防ぐために、 '/ a'修飾子が必要な' [A-Za-z] 'や' [[alpha:]] 'や' \ p {PosixAlpha} 'が必要です。 – Borodin

+0

ありがとうございました。確かに私は更新します。 – ssr1012

3

あなたは1234を印刷したい場合、あなたは正規表現を変更し、第二試合を印刷する必要があります。

use strict; 
use warnings; 

my $line = "ABMA 1234"; 
$line =~ /(\s)(\d{4})/; 

print $2; 
2

私はPerlでの一致どのように出力知らないが、あなたは、出力のための正規表現の下に使用することができますあなたの正規表現の完全一致、現在の正規表現であなたの結果にスペースが追加されるかもしれません。

\b[\d]{4} 

DEMO

+0

あなたの正規表現の文字クラスの使用は何ですか? – mkHun

関連する問題