我想搜索范围为x和y的值。我想要一个通用的PERL正则表达式,因为x和y是动态的。
请帮忙
答案 0 :(得分:3)
这是一个非常糟糕的主意。并非不可能,但很难将其作为一般解决方案。
让我们编写一个匹配2
和123
之间所有数字的正则表达式。我们必须分别查看每个可能的数字位数。
[2-9]
- 2或更大[1-9][0-9]
- 任意两位数字[1](?:[0-1][0-9]|[2][0-3])
- 任意3位数字,最多119
,12x
,0 <= 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]";
}