我有这段代码需要在/
之后或在此字符之间获取单词。
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,可能是什么原因?
答案 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}*)"