0

需要将 BSC0 匹配到 BSC10 和“TOTAL”。但以下条件仅匹配 BSC1 和 BSC10。少了什么东西?也尝试了s/regex/ m/regex/变化

$currentRowHeader将包含没有空格的单个单词

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

2 回答 2

8

[...]是一个字符类。它只能匹配一个字符。正则表达式没有数字的概念——只有数字字符。你的正则表达式说的是

匹配一个字符 from 0to 1(即0 or 1)或匹配一个0.

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

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

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

于 2013-06-28T21:45:57.407 回答
2

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

if ($currentRowHeader =~ /BSC(10|\d)|TOTAL/) 

仅供参考\d,意思是“任何数字”,与 encoding 相同(带有拉丁字符)[0-9],但更短且更易于阅读。

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

于 2013-06-28T22:03:46.210 回答