单行提取字符串中的数字

时间:2012-09-14 14:41:12

标签: perl

我正在学习Perl正则表达式,我正在尝试从字符串中提取数字,例如

my $text = "abc000142gh";

即。我想将000142提取为标量变量中的字符串。

我试过了:

my $digits = $text ~= /(+d)/;
my $digits = $text ~= m/(+d)/;
my $digits = $text ~= m/(+d)/g;
my $digits = $text ~= /(+d)/g;

但它们似乎都没有用。有没有办法用单线程做到这一点?

2 个答案:

答案 0 :(得分:6)

这有效:

my $text = 'abc000142gh';
my ($digits) = $text =~ /(\d+)/;

差异:

  1. 引用字符串(不需要,但更喜欢)。
  2. 括号中的
  3. $ digits用于强制列表上下文。有关详细信息,请参阅perlop
  4. 绑定运算符为=~,而不是~=
  5. \d表示数字,d代表自己。
  6. +(重复)用于重复符号之后,而不是之前。

答案 1 :(得分:3)

您的代码无法编译。这里有一些问题。

  • 您忘记引用字符串

    my $text = 'abc000142gh';
    
  • 您的正则表达式绑定运算符(=~)的方法错误,

  • 忘记了\d
  • 的反斜杠
  • 和前面的量词(+

    my $digits = $text =~ /(\d+)/;      
    

现在回答您的问题您需要强制执行列表上下文。该匹配返回一个列表,由于您有$digits,这是一个标量,列表将转换为其元素数。

(my $digits) = $text =~ /(\d+)/;

如果将m放在正则表达式前面并不重要,因为它隐含在任何/foo/表达式中。


看看这些事情: