2013-01-22 124 views
0

您能否帮助我确定正确的$ 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); 
+1

什么是预期产出? –

+0

对不起,只是纠正了我的帖子,4165867111初始字符串的一部分 – Deano

+0

请确保要么在$手机中转义@或使用单引号而不是双引号。否则,Perl会插入(不存在的)数组'@ something',最终会以''结尾。 – Perleone

回答

2

你替代了^开始,这意味着除非你的模式其余的字符串的开头匹配也不会进行替换。

有很多方法可以做到这一点。如何

my ($partial) = $phone =~ /([2-9]\d+)/; 
return $partial; 

这将返回数字的任何字符串不以0或1

+0

感谢您的帮助,它实际上是一个电话号码,可能是1或0,是否有另一种方法可以做到这一点? – Deano

3
$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; 
+0

完美工作,谢谢 – Deano

2

开始这将捕获@之前的所有数字:

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 
+0

完美!也工作! – Deano

相关问题