我正在学习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;
但它们似乎都没有用。有没有办法用单线程做到这一点?
答案 0 :(得分:6)
这有效:
my $text = 'abc000142gh';
my ($digits) = $text =~ /(\d+)/;
差异:
=~
,而不是~=
。\d
表示数字,d
代表自己。+
(重复)用于重复符号之后,而不是之前。答案 1 :(得分:3)
您的代码无法编译。这里有一些问题。
您忘记引用字符串
my $text = 'abc000142gh';
您的正则表达式绑定运算符(=~
)的方法错误,
\d
和前面的量词(+
)
my $digits = $text =~ /(\d+)/;
现在回答您的问题您需要强制执行列表上下文。该匹配返回一个列表,由于您有$digits
,这是一个标量,列表将转换为其元素数。
(my $digits) = $text =~ /(\d+)/;
如果将m
放在正则表达式前面并不重要,因为它隐含在任何/foo/
表达式中。
看看这些事情: