我正在寻找一个匹配以下“好”值的正则表达式。
100.100.100.10
100.100.100.1
100.100.100
100.100.10
100.100.1
100.100
以下条件必须有效:
要测试字符串值的有效性,请创建以下正则表达式。
([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
以上也需要无效。
任何帮助都将不胜感激。
答案 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位数字$
- 字符串结尾