正则表达式与字符串完全匹配

时间:2017-06-15 00:44:19

标签: java regex

我有下面的字符串,我使用正则表达式进行拆分并获取数组中的id,id,roduct_clinical_studies__rimr,product__rim,product__v。 这适用于大多数情况。但是对于下面的字符串,因为临床包含IN失败。我怎样才能完全匹配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");
}

2 个答案:

答案 0 :(得分:1)

如果您无法通过空格进行识别,请将其作为两次传递来运行。第一次传递所有唯一对象,第二次传递仅用于" IN"。

答案 1 :(得分: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)