简单的Perl字符串问题

时间:2010-03-05 07:27:47

标签: perl

我知道这对某些人来说可能很容易,

我有一个像@¨0­+639172523299这样的简单字符串(在移动电话号码前面有字符)。我的问题是,如何在加号(+)之前删除所有字符?我所知道的是删除已知的字符,如下所示:

$number =~ tr/://d;(如果我想删除冒号)

但是在这里,我想要删除'+'之前的所有字符。

6 个答案:

答案 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;
}