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

Perl conditional regex with inequalities

我有一个疑问。我必须在一个条件下匹配 2 个字符串:

$release = 5.x(这里的x应该大于等于3) $version = Rx(如果$release是5.3,这个x应该大于等于5,否则什么都可以)

例如5.1R11不行,5.3R4不行,5.3R5可以,5.4R1可以。

我写过这样的代码:

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

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

这个怎么写?

在正则表达式中 (?>) 表示 atomic grouping.

将元素分组,以便将其存储到 </code> 中,然后将 <code> 与数字进行比较,因此它应该是

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

这真的是一个三级版本字符串,我建议你使用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.") ge v5.3.5 ) {
    say 'OK';
}

我修改了mkhun的方案后得到了正确的:

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