2016-10-29 18 views
1

正規表現を使用して特定のツイートからユーザー名を解析しようとしていますが、いつもが返されますIllegalStateException一致するものは見つかりませんでしたが、このサイト。つぶやきからJavaの解析がありません

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

javadocに記載されているように、一致する方法の1つである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)); 
} 

[A-Za-z]+が無意味に思えたとして、私はまた、正規表現の小さな微調整を行いました。

0

the javadocより:

整合の明示的な状態が最初に定義されていません。成功した一致の前に の一部を照会しようとすると、 IllegalStateExceptionがスローされます。マッチャーの明示的な状態は、すべてのマッチング操作によって再計算された です。あなたはmatcher.group(0)

を呼び出す前に matcher.matches()を呼び出す必要があり

関連する問題