正则表达式内部数字检查

时间:2018-07-21 17:47:08

标签: java regex string pattern-matching regular-language

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

([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有效

能帮我吗?

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承担一些责任并在不强大的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位数字的可选序列
  • .-隐式的,不是必需的,因为$中使用的模式需要完整的字符串匹配