4165867111 を含む partial_phone になる正しい $string = 行を判断するのを手伝ってくれませんか?
sub phoneno {
my ($string) = @_;
$string =~ s/^\+*0*1*//g;
return $string;
}
my $phone = "<sip:+4165867111@something;tag=somethingelse>";
my $partial_phone = phoneno($phone);
4165867111 を含む partial_phone になる正しい $string = 行を判断するのを手伝ってくれませんか?
sub phoneno {
my ($string) = @_;
$string =~ s/^\+*0*1*//g;
return $string;
}
my $phone = "<sip:+4165867111@something;tag=somethingelse>";
my $partial_phone = phoneno($phone);
$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;
置換は で始まり^
ます。つまり、パターンの残りの部分が文字列の先頭と一致しない限り、置換は実行されません。
これを行う方法はたくさんあります。どうですか
my ($partial) = $phone =~ /([2-9]\d+)/;
return $partial;
これは、0 または 1 で始まらない数字の文字列を返します。
これにより、次の前のすべての数字がキャプチャされます@
。
use strict;
use warnings;
sub phoneno {
my ($string) = @_;
my ($phoneNo) = $string =~ /(\d+)\@/;
return $phoneNo;
}
my $phone = '<sip:+4165867111@something;tag=somethingelse>';
my $partial_phone = phoneno($phone);
print $partial_phone;
出力:
4165867111