Java 正则表达式失败

Java 正则表达式失败,java,regex,Java,Regex,我正在用Java编写代码 我正在尝试编写使此规则有效的常规异常: 输入只能是数字。 输入必须是 仅从03或02或08或09或04开始 和之后必须只有1或2或3或7位数字。 例如: 成功投入: 031, 0822, 097777777 失败输入: 06, 0622, 09666666, 084444. 我试着这么做,但做不好 ^0([23894]\d{1}|\d{2}|\d{3}|\d{7}) 谢谢大家 雷。你把分组搞砸了。试一试 ^0[23894](?:\d|\d{2}|\d{3}|

我正在用Java编写代码

我正在尝试编写使此规则有效的常规异常:

输入只能是数字。 输入必须是 仅从03或02或08或09或04开始 和之后必须只有1或2或3或7位数字。 例如:

成功投入:

 031, 0822, 097777777
失败输入:

 06, 0622, 09666666, 084444.
我试着这么做,但做不好

 ^0([23894]\d{1}|\d{2}|\d{3}|\d{7})
谢谢大家


雷。

你把分组搞砸了。试一试

^0[23894](?:\d|\d{2}|\d{3}|\d{7})$
要了解原因:

^a(bc|d)$

匹配abc或ac,而不是abd。

您把分组搞砸了。试一试

^0[23894](?:\d|\d{2}|\d{3}|\d{7})$
要了解原因:

^a(bc|d)$
匹配abc或ac而不是abd。

尝试将其更改为^0[23894]\d{1,3}\d{7}$untested。您编写的内容查找0,后跟2、3、8、9、4和其他一个数字,或两个数字、三个数字或七个数字。{1,3}指定重复范围为1-3次

$将表达式锚定在字符串的末尾;如果省略它,则以该模式开头的任何字符串都将有效。

尝试将其更改为^0[23894]\d{1,3}\d{7}$untested。您编写的内容查找0,后跟2、3、8、9、4和其他一个数字,或两个数字、三个数字或七个数字。{1,3}指定重复范围为1-3次


$将表达式锚定在字符串的末尾;如果省略它,则以该模式开头的任何字符串都将有效。

这有两个问题:

括号放错了位置,只能在末尾的数字长度上交替

您需要在字符串末尾使用匹配结束符,以确保它与初始数字匹配,然后与1/2/3/7其他数字匹配

试试这个:

^0[23894]\d{1}|\d{2}|\d{3}|\d{7}$


这有两个问题:

括号放错了位置,只能在末尾的数字长度上交替

您需要在字符串末尾使用匹配结束符,以确保它与初始数字匹配,然后与1/2/3/7其他数字匹配

试试这个:

^0[23894]\d{1}|\d{2}|\d{3}|\d{7}$

试试这个:

^0([23894](1|2|3|7)*) 试试这个:

^0([23894](1|2|3|7)*)
事情并不像你期望的那样发展,因为你的正则表达式:

^0([23894]\d{1}|\d{2}|\d{3}|\d{7})
实际上是指:

^0
(
  [23894]\d{1}   // b1
  |              // OR  
  \d{2}          // b2
  |              // OR
  \d{3}          // b3
  |              // OR
  \d{7}          // b4
)
因此,它在开始时匹配0,然后是b1、b2、b3或b4

请尝试以下方法:

^0[23894](\d{1,3}|\d{7})$

事情并不像你期望的那样发展,因为你的正则表达式:

^0([23894]\d{1}|\d{2}|\d{3}|\d{7})
实际上是指:

^0
(
  [23894]\d{1}   // b1
  |              // OR  
  \d{2}          // b2
  |              // OR
  \d{3}          // b3
  |              // OR
  \d{7}          // b4
)
因此,它在开始时匹配0,然后是b1、b2、b3或b4

请尝试以下方法:

^0[23894](\d{1,3}|\d{7})$
\d{2}{124;\ d{3}=\d{1,3}\d{2}\d{3}==\d{1,3}