繁体   English   中英

使用MySQL在REGEXP中转义字符串文字

[英]Escaping String literals in REGEXP with MySQL

这里有一个棘手的问题。

可以说我有表“ books”,其中有“ title”列。 我有一排带有'title'='MyBook'的行。

我想使用REGEXP搜索书名,并且想将所有可搜索的字符串都引用为文字序列:

SELECT * FROM books WHERE title REGEXP '\\QMyBook\\E';

当我使用mariaDB时,我的查询工作正常。 DB会识别此引号。 但是,当我使用纯MySql时,此查询不返回任何内容。 问题不在于反斜杠,我认为MySql在使用“ \\ Q”和“ \\ E”时遇到麻烦。 也许有一种方法可以实现我的目标,但是我真的不想分开逃避每个角色。

我从Java执行此查询。 但是从控制台进行普通查询的方式相同

问题是-由于某些原因,确实有必要使用REGEXP(而不是LIKE)运算符。

但是我不希望带有正则表达式特殊字符(例如“ My.ook”)的查询在这里起作用。 我需要任何带有或不带有正则表达式特殊符号的字符串,都由mysql作为原义序列处理(如果我们传递“点”,我们正在寻找“点”,而不是“任何字符”)

我认为普通的MySQL无法做到这一点,但是如果您升级到MariaDB,则可以使用所需的语法。

请参阅MariaDB的文档以获取更多信息: https : //mariadb.com/kb/en/mariadb/pcre/#quoting

SELECT * FROM books WHERE title REGEXP '\\QMyBook\\E';

我建议切换到MariaDB的原因如下:

  • 过去在MySQL中可用的所有内容均可在MariaDB中运行
  • 您可以从任何客户端连接到MariaDB,而无需更改MySQL配置(这是MySQL的直接替代品)
  • MariaDB并非由大型公司所有,后者可能希望将来对功能收费
  • MariaDB具有许多增强功能,包括许多REGEXP功能,例如您想要的功能和REGEXP_REPLACE,以及​​其他改进。

此列表并不详尽。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM