Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式(regex)即使与提供的字符串和最佳/高效方式匹配,也会失败_Java_Regex - Fatal编程技术网

Java 正则表达式(regex)即使与提供的字符串和最佳/高效方式匹配,也会失败

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}")

我试图在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}"));
正则表达式在
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请将此添加为答案。