2010-12-13 74 views
2

スラング(lol、lmao、imoなど)と絵文字(ie :)、:P、;)にマッチする正規表現を作成する必要があります。等...)。スラングと絵文字の正規表現(正規表現)の作成方法

私はhttp://www.coderanch.com/t/497238/java/java/Regular-Expression-Detecting-Emoticonsの例に従っています。しかし、この方法/アプローチは私のために失敗しています。

たとえば、私はスラング "od"と一致する必要があるとしましょう。私は次のようにパターンを作成します。 パターンパターン= Pattern.compile(Pattern.quote( "od"));

次のテスト文でスラング "od"に一致する必要があるとしましょう。 "いくつかの方法は悪いです"経験的には、ストリング内の単語「メソッド」に1つのマッチがあります。これは私が望むものではありません。

私はjavadocとjavaとregexに関するチュートリアルのいくつかを読んだことがありますが、これはまだ分かりません。

ところで、私はJava 6を使用しています(私はJava 5 APIのドキュメントを見て参照していますが)。

regexが最良の方法でない場合は、私は他のソリューションにもオープンしています。事前に任意のヘルプ/ポインタのおかげで。次のコードは私に3つのマッチを得、上のリンクに基づいています。

String regex = "od"; 
Pattern pattern = Pattern.compile(Pattern.quote(regex)); 
String str = "some methods are bad od od more text"; 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) { 
    System.out.println(matcher.group()); 
} 

次のコードでは一致が返されず、それまでの応答に基づいています。

String regex = "\bod\b"; 
Pattern pattern = Pattern.compile(regex); 
//Pattern pattern = Pattern.compile(Pattern.quote(regex)); //this fails 
String str = "some methods are bad od od more text"; 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) { 
    System.out.println(matcher.group()); 
} 

以下の2つの回答が有効な場合は、ここで正しい/希望するコードを投稿します。経験的に、それは私の3つのマッチ(2 OD及び1 LMAO)を与えるため

String regex = "(\\bod\\b)|(\\blmao\\b)"; 
Pattern pattern = Pattern.compile(regex); 
String str = "some methods are bad od od more text lmao more text"; 
Matcher matcher = pattern.matcher(str); 
while(matcher.find()) { 
    System.out.println(matcher.group()); 
} 

このコードが正しいまたは所望の通りです。申し訳ありませんが、私は、正規表現では、Javaを使用して強く(一般的には正規表現)したいと思います。ご協力いただきありがとうございます。

+0

顔文字が続かれ、スペース、句読点、行の先頭または行末より前にある場合のみ、顔文字を一致させます。 – Cam

+0

この正規表現をPattern.quote(String str)に渡す必要がありますか? – jake

答えて

1

単語の境界(\b)を使用して、の単語をちょうどの単語に一致させることができます。

たとえば、パターン"\bod\b"は "od"と一致しますが、 "メソッド"とは一致しません。

+0

"\ bod \ b"と "\ bod"を試しましたが、どちらも失敗します。 – jake

+0

どうすれば "失敗"するのですか?どのように入力していますか?それがあなたのJavaコードに直接あれば、バックスラッシュを再度エスケープする必要があります - '' \\ bod \\ b "'(もしそうでなければ、バックスラッシュではなくバックスペース文字であると考えられます) –

+0

あなたは正しいです。ありがとう。正規表現は私のJavaコードに直接あります。上記の方法2では、それをString regex = "\\ bod \\ b"に変更した後に動作します。私はあなたの両方を投票するだろうが、私はn00bなので、私はできない。私は正しいコードを追加してみましょう。 – jake

2

[;] - ? " - " と "D" 又は "P" 又は ")" または「(プラスいずれか: "a" または "an" は、[DP()]

は、の組合せを処理します「
例:P :-(; D等...

はちょうど..

1

あなたは、私が希望正規表現を使用する必要がありますか

は楽しみを持っている...以上の組み合わせを追加します。? do

String str = "some methods are bad od od more text lmao more text"; 
String[] words = str.Split(" "); 
for (String s : words) { 
    if (s.Equals("od") || s.Equals("lamo")) 
    System.out.println(s); 
}