Java解析从推文中提到

时间:2016-10-29 17:28:34

标签: java regex twitter

我试图使用正则表达式解析来自特定推文的用户名提及,但它始终返回 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));
你可以帮我在这里找错吗?或者我应该使用不同的正则表达式

2 个答案:

答案 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)