Regex 匹配数字的Perl正则表达式
需要将BSC0与BSC10和“总计”匹配。但以下条件仅匹配BSC1和BSC10。少了什么?还尝试了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
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在这种方式中使用非常广泛。我完全可以放心使用这个正则表达式进行生产。