Java 正则表达式失败
我正在用Java编写代码 我正在尝试编写使此规则有效的常规异常: 输入只能是数字。 输入必须是 仅从03或02或08或09或04开始 和之后必须只有1或2或3或7位数字。 例如: 成功投入: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}|
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}