正则表达式不适用于drools 5.3.0

时间:2017-08-17 08:03:53

标签: java mysql regex drools

我试图在drool规则引擎中使用正则表达式来查找sql​​查询(String)中的特定关键字。但即便是最简单的正则表达也无效。

正则表达式: - (\s|\r)(VALUES)(\|\r)

Drool语法: - when Query :Bean(Value matches "(\s|\r)(VALUES)(\|\r)")

我要做的是,在查询中找到关键字,其中 \ n \ r \ s 或' '或' ')可能在其之前或之后出现。

例如insert into table values (xyz);

insert into table values (xyz);

insert into table values (xyz);

代码正在运行而没有错误但是找不到关键字。 我正在使用 drools 5.3.0 和java jdk 1.8。

我也尝试了(\\s|\\r)(VALUES)(\\|\\r) for \ in java 。仍然没有运气。

任何指导都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您应该记住,matches需要完整的字符串匹配。因此,要将字符串与整个单词VALUES匹配,您需要确保匹配单词前后的字符,并且.*(使用DOTALL修饰符)是通常的选择:

"(?s).*\\bVALUES\\b.*"

<强>详情

  • (?s) - 一个DOT-ALL内联修饰符,使.匹配任何字符
  • .* - 任意0个字符,尽可能多
  • \\bVALUES\\b - 整个单词VALUES\b为单词边界)
  • .* - 任意0个字符,尽可能多。

要确保VALUES周围有特定的字符,您可以使用

"(\\s|\\))(VALUES)(\\\\|\r)"

或与字符类相同:

"([\\s)])(VALUES)([\\\\\r])"

请记住,\应该转义以定义文字\并匹配反斜杠,您需要使用4个反斜杠。因此,([\\s)])(VALUES)([\\\\\r])匹配空白或),然后VALUES\或此后的CR符号。