2017-01-24 3 views
1

私は負の先読みと後ろの否定の見方を模索してきました。しかし、彼らは私がしたいことをしていないようです。特定のキーワードとの一致を防ぐJava正規表現

「word1 word2 word3 word4」という文がありますが、を拒否してください。その文にword3またはword7があれば一致します。別の言葉では、matcher.find()falseでなければなりません。それ、どうやったら出来るの?

理想的には私は//Result: Nothing

String contents = null; 
    contents = "word1 word2 word3 word4"; 
    m = Pattern.compile("(?i)(.*)").matcher(contents); 
    //Result: word1 word2 word3 word4 

    m = Pattern.compile("(?i)(?!.*(word3))(.*)").matcher(contents); 
    //Result: ord3 word4 

    m = Pattern.compile("(?i)(?!.*(word3))(\\w{4}\\d{1}\\s.*)").matcher(contents); 
    //Result: Nothing 

    m = Pattern.compile("(?i)(?<!(word3))(.*)").matcher(contents); 
    //Result: word1 word2 word3 word4 

    m = Pattern.compile("(?i)(.*)(?<!(word3))").matcher(contents); 
    //Result: word1 word2 word3 word4 

    m = Pattern.compile("(?i)(.*)(?<!(word4))").matcher(contents); 
    //Result: word1 word2 word3 word 
+2

私は否定的なブロックヘッドに精通していませんが、2つの一般的なアドバイス:Regexはこれに適したツールではありません。本当にregexを使用する必要がある場合は、 https://regex101.com/ –

+0

まず、単語が文章内に存在するかどうかをチェックし、そうでない場合は、マッチャーを適用しますか? – kaetzacoatl

答えて

1

いかがとして終わるこれを下回る(\\w{4}\\d{1}\\s.*)セクションを参照し、撮影した文は私が撮影した文を締める場合は試合を防ぐためにしかし、私は唯一のこと.*できるだけリラックスしたいです:

Pattern pattern = Pattern.compile("^(?!.*(word1|word2|word3|word4|word5|word6|word7)).*$"); 
Matcher matcher = patter.matcher(" word1"); 
System.out.println(matcher.find()); 

これは、例えばそれらの単語のパターンに応じて単純化することができます

+0

ありがとうございます@ grzegorz-górkiewicz今私の間違いを実現しました。私はあなたの誕生日を逃していました... $ – RonPringadi

+0

あなたは大歓迎です。 –

関連する問題