2017-04-03 131 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]'包括'''''''','''''''''',''''以及大寫和小寫英文字母。你需要'[A-Za-z]'或者[[:alpha:]]或者'\ p {PosixAlpha}',這兩者都需要'/ a'修飾符來防止匹配非ASCII字母。 – 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