我有下面的字符串,我使用正则表达式进行拆分并获取数组中的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");
}
答案 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|SELECT|FROM|WHERE))*\b|(this\.)|[(){}=,]|(\s{2,})
扩展
(?i)
\b
(?:
CONTAINS
| IN
| SELECT
| FROM
| WHERE
)
(?:
/
(?:
CONTAINS
| IN
| SELECT
| FROM
| WHERE
)
)*
\b
| ( this\. ) # (1)
| [(){}=,]
| ( \s{2,} ) # (2)