仅限完整字符串的正则表达式匹配(最多字符串)

时间:2016-12-02 13:03:49

标签: regex

我正在寻找一个匹配以下“好”值的正则表达式。

100.100.100.10
100.100.100.1
100.100.100
100.100.10
100.100.1
100.100

以下条件必须有效:

  • 最少7个字符(xxx.xxx)
  • 最多14个字符(xxx.xxx.xxx.xx)
  • 群组最多可包含3个字符(xxx)
  • 群组需要以'。'
  • 分隔
  • 如果是3组,第三组可以包含1到3个字符(x或xx或xxx)
  • 如果是4组,第四组可以包含1到2个字符(x或xx)
  • 所有以前的小组都需要包含3个字符(xxx)

要测试字符串值的有效性,请创建以下正则表达式。

 ([0-9]{3}(\.[0-9]{3}){2}(\.[0-9]{1,2}))|
 ([0-9]{3}(\.[0-9]{3})(\.[0-9]{1,3})?)

我必须使用OR运算符,但无法找到如何排除包含超过14个字符的值。我已经测试了下面的'坏'示例(通过http://regexr.com/),并在字符串的PART上得到匹配。但是,我的规则必须是不接受这些字符串,因为每个'单词'末尾都有'噪音'(而这个单词被认为是没有空格的字符串)

100.100.100.100.100 

最后一个.100需要使完整字符串无效,不接受部分匹配。将\ b或^ $与OR结合使用并不能提供所需的结果。

100.100.100.100100  
100.100.100100100 
100.100.100.100  

以上也需要无效。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用可选组:

^[0-9]{3}\.[0-9]{3}(?:\.[0-9]{1,3}(?:\.[0-9]{1,2})?)?$

请参阅regex demo

<强>详情:

  • ^ - 字符串的开头 - [0-9]{3} - 3位数(您的第1组)
  • \.[0-9]{3} - 一个点和3位数(第2组)
  • (?:\.[0-9]{1,3}(?:\.[0-9]{1,2})?)? - 可选的组匹配
    • \.[0-9]{1,3} - 一个点和1到3位数(第3组)
    • (?:\.[0-9]{1,2})? - 一个可选组(第4组):
      • \. - 一个点
      • [0-9]{1,2} - 任意1到2位数字
  • $ - 字符串结尾