用于搜索范围内的值的Perl正则表达式

时间:2014-02-20 11:32:27

标签: regex perl range

我想搜索范围为x和y的值。我想要一个通用的PERL正则表达式,因为x和y是动态的。

请帮忙

1 个答案:

答案 0 :(得分:3)

这是一个非常糟糕的主意。并非不可能,但很难将其作为一般解决方案。

让我们编写一个匹配2123之间所有数字的正则表达式。我们必须分别查看每个可能的数字位数。

  • 1位:[2-9] - 2或更大
  • 2位数:[1-9][0-9] - 任意两位数字
  • 3位数:[1](?:[0-1][0-9]|[2][0-3]) - 任意3位数字,最多11912x0 <= x <= 3

一起:/\A(?:[2-9]|[1-9][0-9]|[1](?:[0-1][0-9]|[2][0-3]))\z/

这是可读还是可维护?当然不是。

您可以使用嵌入式代码:/\A([0-9]+)(?(?{ not($x <= $^N && $^N <= $y) })(*F))\z/,但这也很愚蠢。

最好的解决方案是使用代码来完成代码的操作。在这里,正则表达式不是一个合适的工具。

my ($num) = $string =~ /\A([0-9]+)\z/ or die "no number in \$string";
if (not($x <= $num and $num <= $y)) {
   die "Number $num out of range [$x .. $y]";
}