正则表达式内部数字检查
Regular Expression inner Digits check
我有以下正则表达式但它失败了(带点的内部数字):
([0-9]{1,3}\.?[0-9]{1,3}\.?[0-9]{1,3})
我希望它涵盖以下情况:
- 123 有效
- 123.4 有效
- 123.44 有效
- 123.445 有效
- 123.33.3 不正常(正则表达式验证为真)
- 123.3.3 不正常(正则表达式验证为真)
- 123.333.3 有效
- 123.333.34 有效
- 123.333.344 有效
你能帮帮我吗?
你有多个案例,我想像这样使用 |
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}
这将匹配一个或多个数字后跟一个点然后 三个数字 然后一个点然后一个或三个数字
请注意,您可以将 [0-9]
替换为 \d
您的正则表达式可以是:
^(\d{1,3}|\d{1,3}\.\d{1,3}|\d{1,3}\.\d{3}\.\d{1,3})$
这个怎么样(演示在 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}\.?)+)
并以编程方式检查数字计数是否有效。
对 .matches
使用以下表达式:
s.matches("\d{1,3}(?:\.\d{3})?(?:\.\d{1,3})?")
详情
^
- 隐含的,没有必要,因为 .matches
中使用的模式需要完整的字符串匹配
\d{1,3}
- 1 到 3 位数
(?:\.\d{3})?
- 一个可选的 .
和 3 个数字
(?:\.\d{1,3})?
- .
和 1 到 3 个数字的可选序列
$
- 隐含的,不是必需的,因为该模式在 .matches
中使用,需要完整的字符串匹配
我有以下正则表达式但它失败了(带点的内部数字):
([0-9]{1,3}\.?[0-9]{1,3}\.?[0-9]{1,3})
我希望它涵盖以下情况:
- 123 有效
- 123.4 有效
- 123.44 有效
- 123.445 有效
- 123.33.3 不正常(正则表达式验证为真)
- 123.3.3 不正常(正则表达式验证为真)
- 123.333.3 有效
- 123.333.34 有效
- 123.333.344 有效
你能帮帮我吗?
你有多个案例,我想像这样使用 |
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}
这将匹配一个或多个数字后跟一个点然后 三个数字 然后一个点然后一个或三个数字
请注意,您可以将 [0-9]
替换为 \d
您的正则表达式可以是:
^(\d{1,3}|\d{1,3}\.\d{1,3}|\d{1,3}\.\d{3}\.\d{1,3})$
这个怎么样(演示在 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}\.?)+)
并以编程方式检查数字计数是否有效。
对 .matches
使用以下表达式:
s.matches("\d{1,3}(?:\.\d{3})?(?:\.\d{1,3})?")
详情
^
- 隐含的,没有必要,因为.matches
中使用的模式需要完整的字符串匹配\d{1,3}
- 1 到 3 位数(?:\.\d{3})?
- 一个可选的.
和 3 个数字(?:\.\d{1,3})?
-.
和 1 到 3 个数字的可选序列$
- 隐含的,不是必需的,因为该模式在.matches
中使用,需要完整的字符串匹配