我有以下正则表达式,但是它失败了(带点的内部数字):
([0-9]{1,3}\.?[0-9]{1,3}\.?[0-9]{1,3})
我希望它涵盖以下情况:
能帮我吗?
答案 0 :(得分:1)
您有多种情况,我想使用|
的or运算符:
^([0-9]{1,3}|[0-9]{1,3}\.[0-9]{1,3}|[0-9]{1,3}\.[0-9]{3}\.[0-9]{1,3})$
^ ^ ^ ^
您可以检查regex demo
正则表达式匹配三种情况:
案例1
[0-9]{1,3}
这将匹配一个或多个数字
案例2
[0-9]{1,3}\.[0-9]{1,3}
这将匹配一个或多个数字,后跟一个点,然后是一个或多个数字
案例3
[0-9]{1,3}\.[0-9]{3}\.[0-9]{1,3}
这将匹配一个或多个数字,然后是一个点,然后是 3个数字,然后是一个点,然后是一个或三个数字
请注意,您可以将[0-9]
替换为\d
,您的正则表达式可以是:
^(\d{1,3}|\d{1,3}\.\d{1,3}|\d{1,3}\.\d{3}\.\d{1,3})$
答案 1 :(得分:1)
如何处理(演示在Regex101上)。正则表达式非常短而直接:
(^\d{3}\.\d{3}\.\d{1,3}$)|(^\d{3}\.\d{1,3}$)|(^\d{3}$)
这可以识别三个有效的独立组。
(^\d{3}\.\d{3}\.\d{1,3}$)
作为一组,必须具有3位数字,一个点,另外3位数字,一个点和1-3位数字。(^\d{3}\.\d{1,3}$)
作为一组,必须包含3位数字,一个点和1-3位数字。(^\d{3}$)
作为一组,必须包含1-3位数字。这些组用或(|
)语句拆分。
但是,既然您已经标记了java,那么为什么不让Java承担一些责任并在不强大的Regex上提供帮助呢?我宁愿匹配格式((?:\d{1,3}\.?)+)
,并以编程方式检查数字计数是否有效。
答案 2 :(得分:1)
对True
使用以下表达式:
.matches
请参见regex demo
详细信息
s.matches("\\d{1,3}(?:\\.\\d{3})?(?:\\.\\d{1,3})?")
-隐式的,不是必需的,因为^
中使用的模式需要完整的字符串匹配.matches
-1到3位数字\d{1,3}
-可选的(?:\.\d{3})?
和3位数字.
-(?:\.\d{1,3})?
和1到3位数字的可选序列.
-隐式的,不是必需的,因为$
中使用的模式需要完整的字符串匹配