需要将BSC0与BSC10和“TOTAL”匹配。但是以下条件仅匹配BSC1和BSC10。少了什么东西?尝试使用s/regex/
m/regex/
版本
$currentRowHeader
将包含不带空格的单个字
if ($currentRowHeader =~ /BSC[0-10]|TOTAL/) { print "OK"}
答案 0 :(得分:8)
[...]
是字符类。它只能匹配一个字符。正则表达式没有数字概念 - 只有数字字符。你的正则表达式是什么
匹配
0
到1
的字符(即0
或1
)或匹配0
。< / p>
所以它只匹配一个二进制数字。你可以用
if ($currentRowHeader =~ /BSC(?:[0-9]|10)|TOTAL/) { print "OK" }
请注意,?:
不是必需的,但这是一个好习惯,因为它可以抑制不必要的capturing,从而加快操作速度。
答案 1 :(得分:2)
字符类中的破折号是一系列字符,而不是值。试试这个:
if ($currentRowHeader =~ /BSC(10|\d)|TOTAL/)
仅供参考\d
表示“任何数字”,与编码[0-9]
完全相同(使用拉丁字符),但更短且更易于阅读。
正如一些学生会告诉你的那样,\d
包括非拉丁数字,如阿拉伯语和数字的中文符号,但这在这个问题的背景下显然无关紧要。