Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 使用模式/匹配器提取子字符串_Java_Regex_Matcher - Fatal编程技术网

Java 使用模式/匹配器提取子字符串

Java 使用模式/匹配器提取子字符串,java,regex,matcher,Java,Regex,Matcher,我想使用正则表达式和java中的matcher获得一个子字符串,以TKK\ucode>开头。字符串实际上是一个URL,例如 http://somewhere.com/core?item=TKK_43123 到目前为止,我是根据这个写的 但是打印m.group(1)表示未找到匹配项。我想得到您可以使用的TKK_43123 String pattern = "TKK_\\d+"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher

我想使用正则表达式和java中的
matcher
获得一个子字符串,以
TKK\ucode>开头。字符串实际上是一个URL,例如

http://somewhere.com/core?item=TKK_43123
到目前为止,我是根据这个写的

但是打印
m.group(1)
表示
未找到匹配项
。我想得到您可以使用的
TKK_43123

String pattern = "TKK_\\d+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher("http://somewhere.com/core?item=TKK_43123");
if (m.find()){
    System.out.println(m.group(0)); 
} 
// => TKK_43123

\d+
将匹配
TKK
之后的一个或多个数字

请注意,在字符串末尾使用延迟量化模式几乎从来都不是您想要的,因为它匹配最小数量的字符以返回有效匹配。因此,模式末尾的
+?
始终只匹配1个字符<模式末尾的code>*?
将匹配一个空字符串

当然,请始终记住使用
.find()
.matches()
实际运行Matcher,否则,您将无法访问任何组,因为尚未找到匹配项。

您可以使用

String pattern = "TKK_\\d+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher("http://somewhere.com/core?item=TKK_43123");
if (m.find()){
    System.out.println(m.group(0)); 
} 
// => TKK_43123

\d+
将匹配
TKK
之后的一个或多个数字

请注意,在字符串末尾使用延迟量化模式几乎从来都不是您想要的,因为它匹配最小数量的字符以返回有效匹配。因此,模式末尾的
+?
始终只匹配1个字符<模式末尾的code>*?将匹配一个空字符串


当然,请始终记住使用
.find()
.matches()
,实际运行匹配程序,否则,您将无法访问任何组,因为尚未找到匹配项。

如果
TKK.
后面有字母和/或数字,请将
\\d+
替换为
\\w+
。谢谢。一个附带的问题。。。如果我删除
m.find()
,则println表示找不到匹配项。可以吗?@mahmood:一定要记住使用
.find()
.matches()
运行匹配程序,否则,您将无法访问任何组,因为尚未找到匹配项。-不要删除它。如果
TKK
后面有字母和/或数字,请将
\\d+
替换为
\\w+
。谢谢。一个附带的问题。。。如果我删除
m.find()
,则println表示找不到匹配项。可以吗?@mahmood:一定要记住使用
.find()
.matches()
运行匹配程序,否则,您将无法访问任何组,因为尚未找到匹配项。-不要移除那个。