2017-06-15 22 views
1

私はregexを使って分割し、配列内にid、id、roduct_clinical_studies__rimr、product__rim、product__vを取得します。 これはほとんどの場合に有効です。しかし、文字列の下に臨床では、その中に含まれているのでために私がIN/SELECTなどの完全一致を行うことができますfails.How正規表現と完全に一致する文字列

id IN (SELECT id FROM product_clinical_studies__rimr WHERE product__rim CONTAINS {{this.product__v}}) 


String[] parseString(String filterInString) { 
    return filterInString.replaceAll("(?i)CONTAINS|IN|SELECT|FROM|WHERE|(this\\.)|[(){}=,]|(\\s{2,})", " "). 
      replaceAll("\\s+", " ").split("\\s"); 
} 
+0

各キーワードの前または後は何ですか?スペース、行の始まり、行の終わり?他のテキスト? ![A-Za-z0-9]やその他の構文記号のように、 "IN"が空白で囲まれていると仮定できますか? 「全体の言葉」のように? –

+0

各単語の前後にスペースや単語境界( '\ b')を入れることができます。 – phatfingers

+0

なぜ必要なのですか? – javascriptlearner

答えて

1

あなたはどちらかリテラル

(?i)\b(?:CONTAINS|IN|SELECT|FROM|WHERE)\b|(this\.)|[(){}=,]|‌​(\s{2,})

あなたがkeyword/keyword/../..ランを一致させる必要がある場合を(?i)を取り除くか
周りワード境界を追加取得でき、これはおそらく同様に

作品(?i)\b(?:CONTAINS|IN|SELECT|FROM|WHERE)(?:/(?:CONTAINS|IN|SE‌​LECT|FROM|WHERE))*\b‌​|(this\.)|[(){}=,]|(‌​\s{2,})

拡張

(?i) 
    \b 
    (?: 
     CONTAINS 
     | IN 
     | SELECT 
     | FROM 
     | WHERE 
    ) 
    (?: 
     /
     (?: 
       CONTAINS 
      | IN 
      | SELECT 
      | FROM 
      | WHERE 
     ) 
    )* 
    \b 
| (this\.)     # (1) 
| [(){}=,] 
| (\s{2,})     # (2) 
1

あなたが空白で識別できない場合、2つのパスとしてこれを実行します。すべてのユニークなオブジェクトで最初のパス、ちょうど "IN"の2番目のパス。

関連する問題