Java 正则表达式(regex)即使与提供的字符串和最佳/高效方式匹配,也会失败
我试图在Java程序中实现自定义正则表达式,以验证输入字符串是否与正则表达式匹配。但由于某种原因,即使输入字符串与正则表达式匹配,正则表达式也会在特定点失败Java 正则表达式(regex)即使与提供的字符串和最佳/高效方式匹配,也会失败,java,regex,Java,Regex,我试图在Java程序中实现自定义正则表达式,以验证输入字符串是否与正则表达式匹配。但由于某种原因,即使输入字符串与正则表达式匹配,正则表达式也会在特定点失败 String input = "abc:def:id:identifier:123456.890123.1"; System.out.println(input.matches("(abc:def:id:identifier:).[0-9]{6,12}.[0-9]{1,6}.[0-9]{1,20}")
String input = "abc:def:id:identifier:123456.890123.1";
System.out.println(input.matches("(abc:def:id:identifier:).[0-9]{6,12}.[0-9]{1,6}.[0-9]{1,20}"));
正则表达式在123456
点返回false
,即使输入的长度与6匹配。
如果我给出1234567
,那么它将返回true
。我想知道为什么它在123456
中失败,即使它与长度匹配。另外,在下一个例子中,它不会失败,因为我只有1
和{1,20}
的长度
另外,是否有更好的方法在regex中验证此字符串,或者这是一种好的有效方法?正如@JvdV所提到的,应该在开始时删除导致验证过程中出现问题的
应采取以下措施:
input.matches("(abc:def:id:identifier:)[0-9]{6,12}\\.[0-9]{1,6}\\.[0-9]{1,20}")
你使用点(除换行符以外的任何字符)会把事情搞砸。您想使用
\.
对其进行转义。另外,我在冒号后面的输入中没有看到一个点,所以您可能想放弃这个点。非常感谢这项工作:input.matches((abc:def:id:identifier:)[0-9]{6,12}\\.[0-9]{1,6}\.[0-9]{1,20}”)
。另外,还有一个疑问,这是验证的唯一方法,还是有更好的方法使用regex验证输入中的模式?是否有其他更好的方法来验证相同的内容。@JvdV请将此添加为答案。