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