正则表达式内部数字检查

Regular Expression inner Digits check

我有以下正则表达式但它失败了(带点的内部数字):

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

我希望它涵盖以下情况:

你能帮帮我吗?

你有多个案例,我想像这样使用 | 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 承担一些责任,帮助 Regex 不强大的地方呢?我宁愿匹配格式 ((?:\d{1,3}\.?)+) 并以编程方式检查数字计数是否有效。

.matches 使用以下表达式:

s.matches("\d{1,3}(?:\.\d{3})?(?:\.\d{1,3})?")

regex demo

详情

  • ^ - 隐含的,没有必要,因为 .matches 中使用的模式需要完整的字符串匹配
  • \d{1,3} - 1 到 3 位数
  • (?:\.\d{3})? - 一个可选的 . 和 3 个数字
  • (?:\.\d{1,3})? - . 和 1 到 3 个数字的可选序列
  • $ - 隐含的,不是必需的,因为该模式在 .matches 中使用,需要完整的字符串匹配