我有
print $str;
abcd*%1234$sdfsd..#d
Run Code Online (Sandbox Code Playgroud)
该字符串将始终只有一个连续的数字段,就像1234在这种情况下一样.休息全部将是字母或其他特殊字符.
如何提取数字(1234在这种情况下)并将其存回str?
这个页面暗示我应该使用\d,但是怎么样?
FMc*_*FMc 29
如果您不想修改原始字符串,可以使用子模式通过在正则表达式中捕获它们来提取数字.在列表上下文中,正则表达式返回子模式中定义的匹配项.
my $str = 'abc 123 x456xy 789foo';
my ($first_num) = $str =~ /(\d+)/; # 123
my @all_nums = $str =~ /(\d+)/g; # (123, 456, 789)
Run Code Online (Sandbox Code Playgroud)
Phi*_*ter 18
$str =~ s/\D//g;
Run Code Online (Sandbox Code Playgroud)
这将从字符串中删除所有非数字字符.这就是你需要做的一切.
编辑:如果其他脚本中的Unicode数字可能存在,更好的解决方案是:
$str =~ s/[^0-9]//g;
Run Code Online (Sandbox Code Playgroud)