Regex 匹配数字的Perl正则表达式

Regex 匹配数字的Perl正则表达式,regex,perl,Regex,Perl,需要将BSC0与BSC10和“总计”匹配。但以下条件仅匹配BSC1和BSC10。少了什么?还尝试了s/regex/m/regex/变体 $currentRowHeader将包含不带空格的单个单词 if ($currentRowHeader =~ /BSC[0-10]|TOTAL/) { print "OK"} […]是一个字符类。它只能匹配单个字符。正则表达式没有数字的概念,只有数字字符。你的正则表达式说的是 将字符从0匹配到1(即0或1)或匹配0 所以它只匹配一个二进制数字。你可以用 if

需要将BSC0与BSC10和“总计”匹配。但以下条件仅匹配BSC1和BSC10。少了什么?还尝试了
s/regex/
m/regex/
变体

$currentRowHeader
将包含不带空格的单个单词

if ($currentRowHeader =~ /BSC[0-10]|TOTAL/) { print "OK"}
[…]
是一个字符类。它只能匹配单个字符。正则表达式没有数字的概念,只有数字字符。你的正则表达式说的是

将字符从
0
匹配到
1
(即
0
1
)或匹配
0

所以它只匹配一个二进制数字。你可以用

if ($currentRowHeader =~ /BSC(?:[0-9]|10)|TOTAL/) { print "OK" }

请注意,
?:
不是必需的,但它是一个好习惯,因为它可以抑制不必要的操作,从而加快操作。

字符类中的破折号是字符范围,而不是值。试试这个:

if ($currentRowHeader =~ /BSC(10|\d)|TOTAL/) 
仅供参考
\d
表示“任何数字”,与编码
[0-9]
相同(使用拉丁字符),但较短且易于阅读


一些学究会告诉你,
\d
包括非拉丁数字,比如阿拉伯和中国的数字符号,但这显然与这个问题无关。

请不要进一步误解
\d
==
[0-9]
,而这在很多情况下都是正确的(字符串仅包含ASCII字符,
/a
修饰符有效,等等),它实际上匹配Unicode认为是数字的任何字符。例如,此阿拉伯数字٤:
perl-Mutf8-E'say“٤”=~/\d/?“是”:“否”“
@amon-sure,但在这个问题的上下文中,显然使用了英文数字,我所说的是真的。而且,\d在这种方式中使用非常广泛。我完全可以放心使用这个正则表达式进行生产。