Java 中使用 HSQLDB 的正则表达式查询
Regular Expresions queries with HSQLDB in Java
我正在尝试为我的应用程序创建一个正则表达式过滤器。我正在使用 HSQLDB 来存储我的消息,并使用 regex.pattern[1] class 来匹配传入的消息。我注意到 HSQLDB 中的 regex.pattern 和 LIKE 使用不同的匹配 "teqniques".
例子
我要匹配:{"auth_user":"YQ==","auth_pass":"ZGFz"}
.
使用 HSQLDB:SELECT * FROM messages LIKE %auth%
与regex.pattern:\bauth
或auth
我的问题
有什么方法可以从用户那里获取输入并在 HSQLDB 中使用 RLIKE 或 REGEX 进行查询吗?
有什么简单的方法可以在 HSQLDB 查询中转换 regex.pattern 吗?
[1] https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
提前谢谢你。
编辑 1: 我收到的消息不仅是 JSON 格式的。
编辑 2: 我试过 REGEXP_MATCHES
像@JorgeCampos 和@fredt 提到我但我得到以下异常
SQL Error [S1000]: java.lang.ClassCastException: org.hsqldb.types.ClobDataID cannot be cast to java.lang.String
当我执行以下命令时
SELECT * FROM WEBSOCKET_MESSAGE WHERE REGEXP_MATCHES(PAYLOAD_UTF8, '^a.*');
使用REGEXP_MATCHES(column_name, regular_expression)
该函数使用 Java 正则表达式语法。
如果列类型是 CLOB,则转换为 VARCHAR
REGEXP_MATCHES(CAST (column_name AS LONGVARCHAR), regular_expression)
我正在尝试为我的应用程序创建一个正则表达式过滤器。我正在使用 HSQLDB 来存储我的消息,并使用 regex.pattern[1] class 来匹配传入的消息。我注意到 HSQLDB 中的 regex.pattern 和 LIKE 使用不同的匹配 "teqniques".
例子
我要匹配:{"auth_user":"YQ==","auth_pass":"ZGFz"}
.
使用 HSQLDB:SELECT * FROM messages LIKE %auth%
与regex.pattern:\bauth
或auth
我的问题
有什么方法可以从用户那里获取输入并在 HSQLDB 中使用 RLIKE 或 REGEX 进行查询吗?
有什么简单的方法可以在 HSQLDB 查询中转换 regex.pattern 吗?
[1] https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
提前谢谢你。
编辑 1: 我收到的消息不仅是 JSON 格式的。
编辑 2: 我试过 REGEXP_MATCHES
像@JorgeCampos 和@fredt 提到我但我得到以下异常
SQL Error [S1000]: java.lang.ClassCastException: org.hsqldb.types.ClobDataID cannot be cast to java.lang.String
当我执行以下命令时
SELECT * FROM WEBSOCKET_MESSAGE WHERE REGEXP_MATCHES(PAYLOAD_UTF8, '^a.*');
使用REGEXP_MATCHES(column_name, regular_expression)
该函数使用 Java 正则表达式语法。
如果列类型是 CLOB,则转换为 VARCHAR
REGEXP_MATCHES(CAST (column_name AS LONGVARCHAR), regular_expression)