具有不等式的Perl条件正则表达式

时间:2017-03-24 12:40:04

标签: regex perl regex-lookarounds

我有一个查询。如果条件允许,我必须匹配2个字符串:

$ release = 5.x(此处x应大于或等于3) $ version = Rx(如果$ release为5.3,则此x应大于或等于5,否则任何内容均可接受)

e.g。 5.1R11是不可接受的,5.3R4不可接受,5.3R5是可接受的,5.4 R1是可接受的。

我写了这样的代码:

$release = "5.2";
$version = "R4";

if ( $release =~ /5.(?>=3)(\d)/ && $version =~ m/R(?>=5)(\d)/ )
{
    print "OK";
}

我怎么写这个?

3 个答案:

答案 0 :(得分:3)

这实际上是一个三级版本字符串,我建议您使用Perl的version工具

use strict;
use warnings 'all';
use feature 'say';
use version;

my $release = '5.2';
my $version = 'R4';

if ( $version =~ /R(\d+)/ && version->parse("$release.$1") ge v5.3.5 ) {
    say 'OK';
}

答案 1 :(得分:0)

在正则表达式csvfiles中,这意味着atomic grouping.

对元素进行分组,使其存储到(?>),然后将$1与数字进行比较,以便它应该

$1

答案 2 :(得分:-1)

在修改了mkhun的解决方案后,我得到了正确的解决方案:

if ((($release =~ /5.3/)) && (($version =~ m/R(\d+)(.\d+)?/) && ($1 >= 5))
|| ((($release =~ /5.(\d)/) && ($1 > 3)) && ($version =~ m/R(\d+)(.\d+)?/)) )
{
    print "OK\n";
}
相关问题