首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >匹配某个范围内的数字的Java正则表达式

匹配某个范围内的数字的Java正则表达式
EN

Stack Overflow用户
提问于 2018-08-24 03:26:44
回答 1查看 875关注 0票数 -2

我正在尝试创建一个Java正则表达式来识别一个数字(直到执行时我才知道)是否在一个范围内(而这个范围直到执行时我才知道)。

具体地说,我尝试使用Cisco的PRIME合规性模块来验证我的交换机没有非活动的VLAN (对于这个问题,VLAN只是一个数字),但PRIME使用Java正则表达式语法。

我知道我正在评估的特定switch命令使用如下语法:

代码语言:javascript
复制
switchport trunk allowed vlan 1,20,37,45,90-101,300-502,904-2044

那么,我如何判断VLAN "x“是否在这些范围内?

  • 如果x= 20,它应该匹配。
  • 如果x= 90,它应该匹配。
  • 如果x= 900,它应该失败。
  • 如果x= 1043,它应该匹配。

有什么想法吗?

编辑:不幸的是,列出的RegEx here是针对已知范围的;示例都是硬编码的范围。我需要一些未知的x,y和z,其中所有的x,y和z可能是1,2,3,或4位数字,并且当z写成"x-y“时匹配在x和y之间。

有没有办法将字符串"x-y“解析为被理解为数字的\1和\2,并匹配if (z >= \1 && z <= \2)?

我曾经尝试过前视和后视以及疯狂/模糊的Java兼容的正则表达式结构,但是我的头脑很快就进入了第四个维度。

EN

回答 1

Stack Overflow用户

发布于 2018-08-24 04:29:15

我认为这不应该用正则表达式来完成。就我个人而言,我会使用正则表达式来检查它的格式是否正确,即检查字符串是否与"VLAN ([0-9]+(-[0-9]+)?)(,([0-9]+(-[0-9]+)?))*"匹配,然后在逗号上拆分后半部分,并从那里使用整数解析,这取决于其中是否有'-‘,您可以检查范围。

例如:https://jsfiddle.net/gcb9pm7f/15/

代码语言:javascript
复制
function testRanges()
{
  var str = document.getElementById("textField").value;
  var test = parseInt(document.getElementById("numberField").value);

  str = str.toUpperCase(); // VLAN big
  var regex = /^VLAN ([0-9]+(-[0-9]+)?)(,([0-9]+(-[0-9]+)?))*$/g;
  if (regex.test(str))
  {
    str = str.substring(5, str.length); // remove 'VLAN'
    var splitArray = str.split(',');
    for (var idx = 0; idx < splitArray.length; idx++)
    {
      var rangeStr = splitArray[idx];
      if (rangeStr.includes('-'))
      {
        // range, check both values.
        var a = parseInt(rangeStr.split('-')[0]);
        var b = parseInt(rangeStr.split('-')[1]);
        if (a > b)
        {
          if (test >= b && test <= a) return true; // range is inclusive
        }
        else // a <= b
        {
          if (test <= b && test >= a) return true; // range is inclusive
        }
      }
      else // not a range, single value
      {
        if (parseInt(rangeStr) === test) return true;
      }
    }
  }
  return false; // no match or regex not matching.
}

根据需要调整到您的编程语言。应该是相当直接的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51992990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档