是否有可能(或理智)检查八进制数是否在正则表达式的范围内?

时间:2014-02-20 11:10:40

标签: regex xsd

我必须检查表示八进制数的给定XML元素的内容是否在0-77776范围内。

是否可以仅使用正则表达式获得此结果?我已经尝试了很多方面但不知何故有些情况没有得到处理。我找不到匹配7和54327而不是77777的单个表达式。

您建议采用其他什么方法?

1 个答案:

答案 0 :(得分:1)

这个正则表达式有效,但到目前为止我只能在perl中使用它。希望您使用的任何引擎都支持它:

^([0-7]{0,4}|[0-7]{4}(?(?<=^7777)[0-6]|[0-7]))$

perl脚本示例:

sub verify {
    $num = shift;
    if ($num =~ m/^([0-7]{0,4}|[0-7]{4}(?(?<=^7777)[0-6]|[0-7]))$/) {
        print "$num: yes\n";
    }
    else { print "$num: no\n"; }
}

@nums = ("54327","7","77776","77777","77774");

foreach (@nums) {
    verify $_;
}

输出:

54327: yes
7: yes
77776: yes
77777: no
77774: yes