需要将 BSC0 匹配到 BSC10 和“TOTAL”。但以下条件仅匹配 BSC1 和 BSC10。少了什么东西?也尝试了s/regex/
m/regex/
变化
$currentRowHeader
将包含没有空格的单个单词
if ($currentRowHeader =~ /BSC[0-10]|TOTAL/) { print "OK"}
[...]
是一个字符类。它只能匹配一个字符。正则表达式没有数字的概念——只有数字字符。你的正则表达式说的是
匹配一个字符 from
0
to1
(即0
or1
)或匹配一个0
.
所以它只匹配一个二进制数字。你可以使用
if ($currentRowHeader =~ /BSC(?:[0-9]|10)|TOTAL/) { print "OK" }
请注意,这?:
不是必需的,但却是一个好习惯,因为它可以抑制不必要的捕获,从而加快操作速度。
字符类中的破折号是字符范围,而不是值。尝试这个:
if ($currentRowHeader =~ /BSC(10|\d)|TOTAL/)
仅供参考\d
,意思是“任何数字”,与 encoding 相同(带有拉丁字符)[0-9]
,但更短且更易于阅读。
正如一些学究会告诉你的那样,\d
包括非拉丁数字,如数字的阿拉伯和中文符号,但这显然与这个问题的上下文无关。