我试图使用正则表达式解析来自特定推文的用户名提及,但它始终返回 IllegalStateException ,但找不到匹配但我知道正则表达式很好,因为它适用于其他人{{ 3}}在这个网站上找到它。
String input = "@rivest talk in 30 minutes #hype";
String regex = "(?<=^|(?<=[^a-zA-Z0-9-_\\\\.]))@([A-Za-z]+[A-Za-z0-9_]+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
System.out.println(matcher.group(0));
你可以帮我在这里找错吗?或者我应该使用不同的正则表达式
答案 0 :(得分:0)
您忘记拨打[[0 0 0 0]
[0 0 0 0]]
[[1 0 0 0]
[1 0 0 0]]
,这是匹配方法之一,如javadoc中所述。
find()
我还对正则表达式进行了一些小调整,因为String input = "@rivest talk in 30 minutes #hype";
String regex = "(?<=^|(?<=[^a-zA-Z0-9-_\\\\.]))@([A-Za-z][A-Za-z0-9_]+)";
Matcher matcher = Pattern.compile(regex).matcher(input);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
之后的+
似乎毫无意义。
答案 1 :(得分:0)
来自the javadoc:
匹配器的显式状态最初是未定义的;试图 在成功匹配之前查询它的任何部分将导致 抛出IllegalStateException。匹配器的显式状态是 每次比赛操作重新计算。
您必须在致电matcher.matches()
matcher.group(0)