您能否帮助我确定正确的$ string =行,并最终以partial_phone包含4165867111?从另一个获得变量的值
sub phoneno {
my ($string) = @_;
$string =~ s/^\+*0*1*//g;
return $string;
}
my $phone = "<sip:[email protected];tag=somethingelse>";
my $partial_phone = phoneno($phone);
您能否帮助我确定正确的$ string =行,并最终以partial_phone包含4165867111?从另一个获得变量的值
sub phoneno {
my ($string) = @_;
$string =~ s/^\+*0*1*//g;
return $string;
}
my $phone = "<sip:[email protected];tag=somethingelse>";
my $partial_phone = phoneno($phone);
你替代了^
开始,这意味着除非你的模式其余的字符串的开头匹配也不会进行替换。
有很多方法可以做到这一点。如何
my ($partial) = $phone =~ /([2-9]\d+)/;
return $partial;
这将返回数字的任何字符串不以0或1
感谢您的帮助,它实际上是一个电话号码,可能是1或0,是否有另一种方法可以做到这一点? – Deano
$string =~ s{
\A # beginning of string
.+ # any characters
\+ # literal +
( # begin capture to $1
\d{5,} # at least five digits
) # end capture to $`
\@ # literal @
.+ # any characters
\z # end of string
}{$1}xms;
完美工作,谢谢 – Deano
开始这将捕获@
之前的所有数字:
use strict;
use warnings;
sub phoneno {
my ($string) = @_;
my ($phoneNo) = $string =~ /(\d+)\@/;
return $phoneNo;
}
my $phone = '<sip:[email protected];tag=somethingelse>';
my $partial_phone = phoneno($phone);
print $partial_phone;
输出:
4165867111
完美!也工作! – Deano
什么是预期产出? –
对不起,只是纠正了我的帖子,4165867111初始字符串的一部分 – Deano
请确保要么在$手机中转义@或使用单引号而不是双引号。否则,Perl会插入(不存在的)数组'@ something',最终会以''结尾。 –
Perleone