> [accounts]不会尝试查找帐号字,但是一个字符是a,c(字符的重复不会改变任何东西),o,u,n,t或s,因为[…]是
character class所以摆脱那些[和]并用/替换它们,因为你很可能不想接受像/ specialaccounts /但只有/ accounts /这样的情况.
>看起来您只想在/ accounts /之后找到下一个非/部分.在这种情况下,你可以使用/ accounts /([^ /])
>如果您确定URL中只有一个/ accounts / section,您可以(并且对于更易读的代码)将您的while更改为if或甚至是条件运算符.此外,不需要包含(“/ accounts /”),因为它只是在整个字符串上添加了额外的遍历,这可以在find()中完成.
>看起来您的方法不是使用您的类(任何字段)保存的任何数据,因此它可能是静态的.
演示:
//we should resuse once compiled regex, there is no point in compiling it many times
private static Pattern pattern = Pattern.compile("/accounts/([^/]+)");
public static String extractAccountIdFromURL(String url) {
Matcher matcher = pattern.matcher(url);
return matcher.find() ? matcher.group(1) : null;
}
public static void main(java.lang.String[] args) throws Exception {
String examples =
"http://localhost:8024/accounts/u8m21ercgelj/\r\n" +
"http://localhost:8024/accounts/u8m21ercgelj\r\n" +
"http://localhost:8024/accounts/u8m21ercgelj/users?";
for (String url : examples.split("\\R")){// split on line separator like `\r\n`
System.out.println(extractAccountIdFromURL(url));
}
}
输出:
u8m21ercgelj
u8m21ercgelj
u8m21ercgelj