我已经使用正则表达式编写了一个基本程序。 但是,整条线被返回而不是匹配的部分。仅提取模式匹配文本
我只想提取数字。
use strict;
use warnings;
my $line = "ABMA 1234";
$line =~ /(\s)(\d){4}/;
print $line; #prints *ABMA 1234*
我的正则表达式是否正确?
我已经使用正则表达式编写了一个基本程序。 但是,整条线被返回而不是匹配的部分。仅提取模式匹配文本
我只想提取数字。
use strict;
use warnings;
my $line = "ABMA 1234";
$line =~ /(\s)(\d){4}/;
print $line; #prints *ABMA 1234*
我的正则表达式是否正确?
您可以用相应的值代替精确值。而你的文字不会删除\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
就试试这个:
如果你想打印1234,你需要改变你的正则表达式并打印第二节比赛:
use strict;
use warnings;
my $line = "ABMA 1234";
$line =~ /(\s)(\d{4})/;
print $2;
字符类'[A-z]'包括'''''''','''''''''',''''以及大写和小写英文字母。你需要'[A-Za-z]'或者[[:alpha:]]或者'\ p {PosixAlpha}',这两者都需要'/ a'修饰符来防止匹配非ASCII字母。 – Borodin
是的,谢谢你指出这一点。当然,我会更新。 – ssr1012