Perl正则表达式匹配数字

时间:2013-06-28 21:42:19

标签: regex perl

需要将BSC0与BSC10和“TOTAL”匹配。但是以下条件仅匹配BSC1和BSC10。少了什么东西?尝试使用s/regex/ m/regex/版本

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

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

2 个答案:

答案 0 :(得分:8)

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

  

匹配01的字符(即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包括非拉丁数字,如阿拉伯语和数字的中文符号,但这在这个问题的背景下显然无关紧要。