我知道这对某些人来说可能很容易,
我有一个像@¨0+639172523299
这样的简单字符串(在移动电话号码前面有字符)。我的问题是,如何在加号(+)之前删除所有字符?我所知道的是删除已知的字符,如下所示:
$number =~ tr/://d;
(如果我想删除冒号)
但是在这里,我想要删除'+'之前的所有字符。
答案 0 :(得分:4)
要删除包括第一个+在内的所有内容,您可以执行以下操作:
$number ~= s/.*\+//;
如果你想保留+,你可以把它放到替换中:
$number ~= s/.*\+/+/;
以上说:匹配“任何”(.*
)后跟+
(+
是正则表达式中的特殊字符,这就是它需要反斜杠转义的原因)并将其替换为空(或在上面的示例中,将其替换为单个+
)。
请注意,上面的内容会删除字符串中的最后+
内的所有内容,这可能不是您想要的。如果你想要删除字符串中FIRST +
以外的所有内容,你可以这样做:
$number =~ s/[^+]*\+//;
或
$number =~ s/[^+]*\+/+/; # Keep the +
与第一个正则表达式的区别在于[^+]*
而不是.*
,这意味着“匹配除+
之外的任何字符”。
有关Perl正则表达式的更多信息,perldoc perlre手册页非常好,就像O'Reilly的Mastering Regular Expressions书一样。
答案 1 :(得分:2)
最简单的情况
$string =~ s/^.*\+//;
如果您在手机号码
之前有多个“+”$string="@+0+0+639172523299";
@s=split /\+/,$string;
print $s[-1];
实际上,您可以使用split()
代替正则表达式。它更容易。
答案 2 :(得分:1)
my $string = '@¨0+639172523299';
$string =~ s/(.*)(?=\+)//;
print $string;
答案 3 :(得分:0)
$number =~ s/^.*\+//;
答案 4 :(得分:0)
s/(.*?\+)(.*)/\2/;
如果你想要加上
S /(*?)(\ +)/ \ 2 \ 3 /(。*);
答案 5 :(得分:0)
my $str="@¨0+639172523299";
if($str=~/(\D+)(\+[0-9]+)/)
{
print $2;
}