首页 > 解决方案 > Java regex to match

问题描述

For regex validation of string for 1 or 1_2 or 0_2_3. So it's either a digit or digit_digit with maximum 3 times. I have tried[0-4]{1}||([0-4]+[_]+[0-4]){1,3} This is not doing the validation correctly.

标签: javaregexstring

解决方案


首先,您指定了两个由 分隔的替代选项|

[0-4]{1}匹配 0 - 4 范围内的单个数字,但{1}完全是多余的,因为[0-4]做同样的事情。

您的第二个选择(在 之后|)是([0-4]+[_]+[0-4]){1,3},但[0-4]+它本身将匹配 1 个或多个(无限数量)的数字。下一项[_]+将匹配一个或多个_字符(但也将只是_+),下一项[0-4]将匹配一个数字。然后整个组可以重复 1 到 3 次,由 指定{1,3}。因此,这将匹配,例如12312311123______4 91293939___8 12___8,其中我使用突出显示来显示三个重复组。

如果我了解您要匹配的内容,那么您的正则表达式应该是:

^[0-4](_[0-4]){0,2}$
  1. ^匹配字符串的开头。
  2. [0-4]匹配 0 到 4 范围内的单个数字。
  3. (启动将重复的捕获组。
  4. _匹配一个_
  5. [0-4]匹配 0 到 4 范围内的单个数字。
  6. ')` 完成从 3 开始的捕获组。
  7. {0,2}表示由项目 3. 到 6. 定义的捕获组可以重复 0 到 2 次。
  8. $匹配字符串的结尾。

拥有锚点 ^$目的是确保输入字符串中除了您尝试匹配的字符之外没有其他无关字符。

见正则表达式演示


推荐阅读