-1

我正在学习 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;

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

4

2 回答 2

6

这有效:

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

区别:

  1. 字符串周围的引号(不需要,但首选)。
  2. 括号中的 $digits 以强制执行列表上下文。有关详细信息,请参阅perlop
  3. 绑定运算符是=~,不是~=
  4. \d表示一个数字,d代表它自己。
  5. +(repetition) 用在要重复的符号之后,而不是之前。
于 2012-09-14T14:45:59.127 回答
3

您的代码无法编译。这里有几个问题。

  • 您忘记引用您的字符串

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

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

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

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

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

是否将 放在正则表达式的前面并不重要,m因为它对任何/foo/表达式都是隐含的。


看看这些东西:

于 2012-09-14T14:46:09.473 回答