单行提取字符串中的数字

Ame*_*ina -1 perl

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

my $text = "abc000142gh";
Run Code Online (Sandbox Code Playgroud)

即我想000142在标量变量中提取为字符串.

我试过了:

my $digits = $text ~= /(+d)/;
my $digits = $text ~= m/(+d)/;
my $digits = $text ~= m/(+d)/g;
my $digits = $text ~= /(+d)/g;
Run Code Online (Sandbox Code Playgroud)

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

cho*_*oba 6

这有效:

my $text = 'abc000142gh';
my ($digits) = $text =~ /(\d+)/;
Run Code Online (Sandbox Code Playgroud)

差异:

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

  • 值得注意的是,将赋值放在列表上下文中很重要,因为匹配返回匹配列表,列表赋值给标量会导致匹配数,而不是匹配本身.因此,将数字放入列表上下文将允许它接收找到的第一个匹配,而不仅仅是匹配的数量. (2认同)