2017-06-15 69 views
1

我有下面的字符串,我使用正则表达式分割并获得数组中的id,id,roduct_clinical_studies__rimr,product__rim,product__v。 这适用于大多数情况。但对于下面的字符串,因为临床中包含它fails.How我可以做IN/SELECT等的精确匹配正则表达式与字符串完全匹配

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

每个关键字之前或之后是什么?空格,行的开始,行的结尾?其他文字?你能否假设“IN”会被![A-Za-z0-9]和其他语法符号中的空白所包围?如“整个词”? –

+0

您可以在每个术语之前和之后放置空格或单词边界('\ b')。 – phatfingers

+0

我们为什么需要?: – javascriptlearner

回答

1

你既可以摆脱(?i)获取或周围添加
单词边界的文字

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

如果您需要匹配keyword/keyword/../..运行,这可能工作
以及

(?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

如果你不能用空格确定,然后运行该两个通行证。首先传入所有独特的对象,第二次传入“IN”。