2012-01-12 18 views
0

regexで文字列 "executeQuery"を検索することはできますが、文字列全体に "vo"または "Viewobject"が含まれているとできません。Java検索の正規表現

例:

ResultSet rs = ps.executeQuery(); --> CORRECT 
super.executeQueryForCollection(object, object1, i); --> CORRECT 
voOEPoDEStruktura.executeQuery(); --> WRONG 
ViewObject.executeQuery(); --> WRONG 
+0

正規表現でこれを行う必要がある特定の理由はありますか? –

答えて

1

^(?!.*(?:vo|ViewObject)).*executeQuery.*は、仕様と一致する正規表現です。あなたが何かをキャプチャしたいと指定していないので、私はキャプチャグループを使用しませんでした。

あなたが理解しやすいので、containsを含むソリューションを使用する必要があります。

3

あなたは必ず正規表現を必要としません。代わりにcontainsを使用できます。条件は次のようになります。

str.contains("executeQuery") && !(str.contains("vo") || str.contains("Viewobject")) 
+0

+1。覚えておいてください:最初に問題があって正規表現を使って解決しようとすると、突然2つの問題が発生します。オーバーエンジニアリングしないでください。 –

+0

ビットを変更して高速化する !str.contains( "vo")&&!str.contains( "Viewobject")&& str.contains( "executeQuery") – ligerdave

+1

これは高速ですか?大部分の行にこれらの文字列が含まれていない場合、ランダムな50文字の行を解析するときに何が起こるかを調べてみましょう: '!str.contains(" vo ")&&!str.contains(" Viewobject ")&& 0str.contains("文字列が含まれているかどうかを調べるために50文字をスキャンします。 文字列を検索するために50文字をスキャンします。 .contains( "vo")|| str.contains( "Viewobject")) executeQuery ...の行をスキャンし、99%の時間を失敗して、すぐに終了します。 –