私は、正規表現を使用してTweeterのメッセージに記載されているユーザー名を抽出する小さなプログラムを作成しています。しかし、いくつかのテストケースでは、プログラムの一部が失敗しています。基本的に、以下で指定された正規表現パターンはtext1とマッチできますが、text2ではマッチできません。さて、以下の正規表現パターンは、文字列の最初の文字が "@"で、その後にtweeterの有効なユーザ名が続く特定のテストケースにマッチすることを意図しています。私はこの正規表現を誤解して、間違って使っていたに違いないと思う。誰かがこれでいくつかの光を当てることができるだろうか?ツイッターメッセージで上記の名前を抽出するJavaの正規表現
String validTweetPattern1 = "^[@]((?=.*[A-Za-z0-9])[\\w-_]+)";
String text1 = "@mention";
String text2 = "@mention @hello";
System.out.println(Pattern.matches(validTweetPattern1, text1));
System.out.println(Pattern.matches(validTweetPattern1, text2));
Console Output:
True
False
ありがとうございます。
String validTweetPattern1 = "(?:^|.*\\s+)[@]((?=.*[A-Za-z0-9])[\\w-_]+).*";
これは時のいずれか@
記号で始まる文字列としてTwitterのハッシュタグを識別します
はい、私の現在の正規表現は、最初のハッシュタグのみを検索します。私のプログラムでは、実際にこの正規表現を使用して、文字列の先頭にハッシュタグがあるかどうかを確認しています。それ以外の場合は、別の正規表現を使用して本文中の他のハッシュタグを検索します。 正規表現の問題は、有効なツイッターハッシュタグとして電子メールアドレスのようなものも検出することです。この正規表現は、以下に少し適していますか? "[\\ W && [^ @]] *(?=。* [A-Za-z0-9])[\\ w -_] +)[\\ W && [^ @]] *" – Zen
@ Zen私の正規表現のロジックを更新しました。 –