2017-10-03 38 views
1

学校の割り当てには、文字列の正規表現とmatches()メソッドを使用して簡単なスパムフィルタを作成するように求められます。 2つの言葉はスパムとバイアグラです。小文字か大文字か、文字の間に繰り返される文字か空白のスペルがあっても動作するはずです。たとえば、「」V I AA GGGG RRR AA 『または』 xxxSPAMyyy」。正規表現を使った正規表現を使用した文字列

これが今の私が持っているもの

 if(Item.getSubject().matches("(?i).*s.*p.*a.*m.*") ||Item.getMessage().matches("(?i).*v.*i.*a.*g.*r.*a.*")){ 
     return false; 
    } 

あり、それは私がそれをしたいいけない上に示した例のためだけでなく、文字列のために働きます

+0

その他、 ''(?i)。* s。* p。* a。* m。* "は' Superpharm'にマッチします。 '。*'を '[a-zA-Z] * 'と置き換えることはできません。 –

+2

ヒント:文字間の'。* 'は何をしますか? –

+0

@JoeCが言っていることについて[this](https://regex101.com/r/ryegAZ/2)を参照してください。 – kaza

答えて

0

正規表現とのマッチングをより簡単にするために、入力データを前処理または正規化することができます。たとえば、削除するとすべての空白文字を入力すると、正規表現ははるかに単純で信頼性が高くなります。「Buy V I AA gggg RrR aA !!! 「BuyViAAggggRrRaA !!!」になり、「(?i)。* v + i + a + g + r + a +。*」式と簡単に一致させることができます。もちろん、正規表現で100%正しいことはありません。

関連する問題