2016-10-03 5 views
3

java regexを使用して、文字列内の特定の単語を見つける方法。私の必要性は、文字列 "Google"に "gooe"という単語が含まれているかどうかをチェックすることです。たとえば : -java正規表現を使用して特定の単語を見つける方法

文字列:Goolge

言葉を見つけるのは:

"Googleは" すべての文字gは、O、O、eはそれがtrueを返す含む文字列をgooe。 文字列が "wikipedia"で、見つかった単語が "gooe"の場合はfalseを返します。 このシナリオで正規表現を作成する方法..?

+3

1文字あたり1桁の先読み構造を作成します。 – revo

+2

正規表現を使用してもよろしいですか? – khelwood

+0

はい私はこの正規表現をapache nifiで使いたいので、正規表現を使いたいです。 – Krish

答えて

0

あなたが使用できる文字列全体で単語を検索する場合:

"^(?=.*e)(?=.*o.*o)(?=.*g).*" 
+0

ありがとうございますが、それは私のシナリオとまったく同じではありません。文字列が "looge"の場合、式はfalseを返します。しかし、私の要件は、私の文字列looge、google、elgoogなどの場合にtrueを返す必要があります。 – Krish

+0

文字列が "loogle"で "gooe" – olsli

+0

ありがとうございますが、それは私のシナリオとまったく同じではありません。文字列が "looge"の場合、式はfalseを返します。しかし、私の必要条件は、私の文字列looge、google、elgoogなどの場合に真でなければなりません。私の正規表現は、与えられた文字列に存在するかどうか(任意の順序であるかもしれません)存在する場合はtrueを返します。 gooeを見つける単語 文字列google、elgoog、looge、oogleの正規表現は真を返す必要があります。 wiki、gold、lodge、これらの文字列に対して、私の正規表現はfalseを返す必要があります。 – Krish

0

私はちょうど「先読み」を利用して、このような正規表現をテストしてみた:

(?=^.*g)(?=^.*o)(?=^.*e) 

それg、o、eを含むすべての文字列に対してtrueを返し、欠落している文字がある場合はfalseを返します。

0

各文字に肯定的な先読みを構築する必要があります。検索語としてgooeを有する場合には、当社の正規表現は、次のようになります。

(?i)(?=.*g)(?=.*o)(?=.*o)(?=.*e) 

それは、私たちは2つのまったく同じ先読みを持っていることは明らかです。彼らは2番目のoの位置で満足するので、1つは冗長です。最終的なパターンを作成する前に、検索用語から重複する文字を削除することができます。 (?i)は大文字小文字の区別をしないフラグをオンに設定します。

String term = "Gooe"; // Search term 
String word = "google"; // Against word `Google` 

String pattern = "(?i)(?=.*" + String.join(")(?=.*", term.split("(?!^)")) + ")"; 
Pattern regex = Pattern.compile(pattern); 
Matcher match = regex.matcher(word); 
if (match.find()) { 
    // Matched 
} 

順序が重要であり、2つのo秒間見ながら、正確にそれらの両方が存在しなければならない場合は、私たちの正規表現は次のようになりdemo here

を参照してください:

(?i).*?g.*?o.*?o.*?e 

のJava:

String pattern = "(?i).*?" + String.join(".*?", term.split("(?!^)")); 
関連する問題