java - 正则表达式在 drools 5.3.0 中不起作用

标签 java mysql regex drools

我正在尝试在 drool 规则引擎中使用正则表达式来查找 sql 查询(字符串)中的特定关键字。但即使是最简单的正则表达式也不起作用。

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

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

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

例如insert into table values (xyz);

插入表格 值 (xyz);

插入表值 (xyz);

代码运行无误,但未找到关键字。 我正在使用 drools 5.3.0 和 java jdk 1.8。

我也为 \in 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 符号。

关于java - 正则表达式在 drools 5.3.0 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45729650/

相关文章:

java - Spring 请求映射 - 将所有 GET 请求映射到唯一端点

java - 如何格式化 POI 创建的 Excel 文档

java - Hibernate通过rest api进行插入操作

javascript - 正则表达式字符恰好出现两次

java - PyLucene org.apache.lucene.benchmark 丢失

java - 如何删除Android中特定联系人号码的所有短信

php - PHP 连接服务器失败

mysql - 在两列之间匹配一些单词

python - 在 python 中使用 re 匹配直到一个模式

javascript - 正则表达式删除所有不跟在数字后面的句点