2012-04-17 1 views
1

に私はそれがの単語が含まれているかどうかを確認するために文を検索し、簡単な正規表現を持っていない|ための|中|で、ここではほとんどregexpalで働いている私の正規表現です:正規表現はregexpalでの作業が、Java

[^ A-ZA-Z] |について|中|私は、次のsetences上でそれを実行し、[^ A-ZA-z]は

で:

show me the weather of seattle 
show me the weather in seattle 
show me the weather for seattle 
show me the weather at seattle 

と現在地結果:

enter image description here

Javaコードで使用すると、まったく機能しません。正規表現でも、私は最初と最後で定義されたスペースを示しています。誰かが私の正規表現が間違っているものを教えてください、どのように文

に多くの単語の一つを検索するために、私はいつもそれが正規表現に一致していないことを意味している私のJavaで他の条件を得ることができます。

public class Regex 
{ 
public static void main(String[] args) 
{ 
    String str = "show me the weather in seattle"; 

    if(str.matches("[^A-Za-z]of|for|in|at[^A-Za-z]")){ 
     System.out.println("Yayyy!!"); 
    } 
    else{ 
     System.out.println("OMG now what to do"); 
    }  
} 
} 
+2

'matches'文字列が完全にチェックされています。それはマッチを探していません。 regexp – turbanoff

+3

また、 "space"は "of"の前と "at"の後ろにのみあります。 [^ A-Za-z](of | in | at)[^ A-Za-z]またはより良い、 '\\ W(of | in | | at)\\ W 'を使用してください。 –

+0

@ turbanoff私は試しましたが、天気やシアトルにいるので "at"を取り除くと「天気のシアトルを見せてください」と一致するのも問題です。私は任意の単語の独立した出現を必要とするため、私は[^ A-Za-z]を使用しました – Yogesh

答えて

1

はこの作品.*[^A-Za-z](of|for|in|at)[^A-Za-z].*ないのですか?。もちろん、| for | inのどこが単語の始めか終わりかの境界の場合を調べるために余分な処理をする必要があります。

+0

ありがとうございます。できます。私の声明では、これらの言葉は声明の間にのみ現れます。よろしくお願いします。 – Yogesh

+0

'。*'は必要ありません。正規表現は、セット内の単語の前後にある非文字にバインドされています。 '。*'を追加するのは完全に不要で無意味です。 –

+0

@EliSand 'mathes'メソッドが完全な文字列が正規表現の右側にマッチするかどうかをチェックしていることを理解できませんでしたか?それはそのようなものなので、あなたの前提はマッチの前と後の文字列に他の "文字"がない場合にのみ働きます。それで、ここでは、「何人かのキャラクターかもしれません」、「それから非文字」、「それから私が探しているもの」、「非文字」、「それ以上のキャラクターかもしれません。 ) –

1
[^A-Za-z](?:of|for|in|at)[^A-Za-z] 

あなたがグループに「または」マッチをしたいが、それ以外の場合は、あなたが意味考えて:あなたが望んでいないものを非常に可能性があり

[^A-Za-z]of OR for OR in OR at[^A-Za-z] 

ここに私のJavaコードです。

+0

Pro-tip: '()'の中の '?:'部分はマッチするだけのグループになりますが、マッチエンティティとしては使用できません。テクニカルなジャンボの説明は何でも。 –

+0

正規表現では動作しますが、javaでは動作しません。 Javaで私のコードはもう一度else caseに行きます。str.matches()を呼び出すために何かを追加する必要がありますか?そして、はい、私は1またはforまたはinまたはatの発生が欲しいです。彼のステートメントでユーザが[of | for | in |]を持っているかどうかを確認できるようにしたい – Yogesh

+0

あなたが正規表現で実際に達成しようとしていることを理解しているなら、 '\ b (for | in | at)\ b'である。また、 '.matches()'はtrue/falseを返すか、それともテストできる条件を返しますか? –