仅提取模式匹配的文本

时间:2017-04-03 10:00:46

标签: regex perl

我使用正则表达式编写了一个基本程序。 但是返回整行而不是匹配的部分。

我想只提取数字。

use strict;
use warnings;

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

print $line; #prints *ABMA 1234*

我的正则表达式不正确吗?

3 个答案:

答案 0 :(得分:3)

如果要打印1234,则需要更改正则表达式并打印第二场比赛:

use strict;
use warnings;

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

print $2;

答案 1 :(得分:2)

我不知道如何在perl中输出匹配项,但您可以使用下面的正则表达式输出正则表达式中的完整匹配项,您可能会在当前正则表达式中为结果添加空格。

\b[\d]{4}

DEMO

答案 2 :(得分: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

试试这个: