正则表达式在 drools 5.3.0 中不起作用
Regular expression not working in drools 5.3.0
我正在尝试在 drool 规则引擎中使用正则表达式来查找 sql 查询(字符串)中的特定关键字。但即使是最简单的正则表达式也不起作用。
正则表达式:- (\s|\r)(VALUES)(\|\r)
流口水语法:- when Query :Bean(Value matches "(\s|\r)(VALUES)(\|\r)")
我想做的是,在查询中找到 Values 关键字,其中 (\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。
我也在 java 中为 \ 尝试了 (\s|\r)(VALUES)(\|\r)
。仍然没有运气。
任何指导将不胜感激。
您应该记住 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 符号。
我正在尝试在 drool 规则引擎中使用正则表达式来查找 sql 查询(字符串)中的特定关键字。但即使是最简单的正则表达式也不起作用。
正则表达式:- (\s|\r)(VALUES)(\|\r)
流口水语法:- when Query :Bean(Value matches "(\s|\r)(VALUES)(\|\r)")
我想做的是,在查询中找到 Values 关键字,其中 (\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。
我也在 java 中为 \ 尝试了 (\s|\r)(VALUES)(\|\r)
。仍然没有运气。
任何指导将不胜感激。
您应该记住 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 符号。