Java 正则表达式30个数字+;空间+;海彭+;空间+;1号

Java 正则表达式30个数字+;空间+;海彭+;空间+;1号,java,regex,Java,Regex,我有这个代码来找到这个模式:201409250200131738007947036000-1,在文本中 final String patternStr = "(\\d{30} - \\d{1})"; final Pattern p = Pattern.compile(patternStr); final Matcher m = p.matcher(page); if

我有这个代码来找到这个模式:201409250200131738007947036000-1,在文本中

              final String patternStr = "(\\d{30} - \\d{1})";
              final Pattern p = Pattern.compile(patternStr);


                  final Matcher m = p.matcher(page);
                  if (m.matches()) {
                      System.out.println("SUCCESS");
                  }

但是对于Java中的任何奇怪的重新定义都不起作用,有人能帮我一下错误在哪里吗?

原因是
匹配方法检查整个给定字符串以匹配正则表达式

因此,也就是说,如果您的字符串是
1234561234561234561234-8
它将匹配,如果它是
我的号码1234561234561234561234-8在其他文本中
它将不会匹配

使用
find
方法完成任务:

if (m.find()) {
    System.out.println("SUCCESS");
}

它将在给定字符串内搜索,而不是尝试匹配整个字符串。

原因是
匹配方法检查整个给定字符串以匹配正则表达式

因此,也就是说,如果您的字符串是
1234561234561234561234-8
它将匹配,如果它是
我的号码1234561234561234561234-8在其他文本中
它将不会匹配

使用
find
方法完成任务:

if (m.find()) {
    System.out.println("SUCCESS");
}
它将在给定字符串中搜索,而不是尝试匹配整个字符串。

从中,
匹配

尝试根据图案匹配整个区域

与查找相反,查找以下内容:

尝试查找与模式匹配的输入序列的下一个子序列

因此,使用
匹配
将整个
字符串
与模式匹配,使用
查找
字符串
中定位模式

尝试:

我稍微编辑了一下您的模式,使其更加健壮。这将打印找到的每个匹配项。

来自,
匹配项

尝试根据图案匹配整个区域

与查找相反,查找以下内容:

尝试查找与模式匹配的输入序列的下一个子序列

因此,使用
匹配
将整个
字符串
与模式匹配,使用
查找
字符串
中定位模式

尝试:


我稍微编辑了一下您的模式,使其更加健壮。这将打印找到的每个匹配项。

您是否试图在文本中查找该模式,检查整个
字符串是否与该模式匹配?您也不需要使用括号。既然可以使用
String.matches
,为什么还要使用模式匹配器?顺便说一句,你的代码运行得很好。你是在检查整个
字符串是否与该模式匹配的文本中找到该模式吗?您也不需要使用括号。既然可以使用
String.matches
,为什么还要使用模式匹配器?顺便说一下,你的代码运行良好。