正则表达式在正斜杠之后或之间匹配单词

时间:2016-06-04 20:06:13

标签: java regex

我有这段代码需要在/之后或在此字符之间获取单词。

Pattern pattern = Pattern.compile("\\/([a-zA-Z0-9]{0,})"); // Regex:  \/([a-zA-Z0-9]{0,})
Matcher matcher = pattern.matcher(path);
if(matcher.matches()){
   return matcher.group(0);
}

正则表达式\/([a-zA-Z0-9]{0,})有效但不是Java,可能是什么原因?

1 个答案:

答案 0 :(得分:2)

您需要获取第1组的值并使用find获得部分匹配:

Pattern pattern = Pattern.compile("/([a-zA-Z0-9]*)");
Matcher matcher = pattern.matcher(path);
if(matcher.find()){
   return matcher.group(1);  // Here, use Group 1 value
}

Matcher.matches需要完整的字符串匹配,只有在字符串与模式完全匹配时才使用它。否则,请使用Matcher.find

由于你需要的值是捕获到第1组(([a-zA-Z0-9]*),用括号括起来的子模式),你需要返回那个部分。

您无需转义Java正则表达式中的/。此外,{0,}的功能与*量词的相同(匹配零个或多个量化子模式的匹配)。

此外,[a-zA-Z0-9]可以替换为\p{Alnum}以匹配相同的字符范围(请参阅Java regex syntax reference。模式声明将如下所示

"/(\\p{Alnum}*)"