MySQL Regex - 如何查找特定的连续单词集

标签 mysql regex

我正在尝试使用此正则表达式字符串查询我的 MySQL 数据库,

^(?=.*?\\bAuto\\b)(?=.*?\\bAnd\\b)(?=.*?\\bFashion\\b)(?=.*?\\bFair\\b).*$

在我的本地主机上它工作正常,但在远程服务器上我收到如下错误:

[03-Mar-2017 09:49:47 UTC] PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'repetition-operator operand invalid' from regexp' in /home/public_html/assets/sys/pdo.php:491

仅供引用,生成的查询字符串如下:

$SELECT * FROM table WHERE name REGEXP "^(?=.*?\\bAuto\\b)(?=.*?\\bAnd\\b)(?=.*?\\bFashion\\b)(?=.*?\\bFair\\b).*$" AND status = 1

最佳答案

MySQL regex基于 POSIX,并且不支持您的正则表达式模式中的以下内容:

  • (?=...) - 环视(既不是前瞻,也不是后顾)
  • *? - 惰性量词
  • \\b - 字边界写为[[:<:]] (单词位置的开头)和 [[:>:]] (单词位置的结尾)。

作为^(?=.*?\\bAuto\\b)(?=.*?\\bAnd\\b)(?=.*?\\bFashion\\b)(?=.*?\\bFair\\b).*$正则表达式匹配包含正向先行中列出的所有完整单词的任何字符串,您只能将当前的正则表达式重写为一系列 WHERE name REGEXP "<whole_word>" :

WHERE name REGEXP "[[:<:]]Auto[[:>:]]" AND WHERE name REGEXP "[[:<:]]And[[:>:]]" AND WHERE name REGEXP "[[:<:]]Fashion[[:>:]]" AND WHERE name REGEXP "[[:<:]]Fair[[:>:]]"

此外,如果您需要区分大小写的搜索,则需要使用BINARY之后REGEXP .

关于MySQL Regex - 如何查找特定的连续单词集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576117/

相关文章:

html - 有没有办法在 MySQL 中选择带有 html 标签的列?

mysql - 结构用户 - 有很多 session 。查找给定 session 的用户

MySQL奇怪的date_add间隔

regex - awk 正则表达式

java - 正则表达式检查运行无限时间

c# - 用于检索 CSS url 函数参数的正则表达式

mysql - GROUP BY 一个特定的命令?

php - 数据包装方法

regex - 在 R 中使用 AND 进行 Grep

java - 关于java正则表达式的帮助