mysql - mySQL 查询的正则表达式问题

标签 mysql

我正在尝试构建一个搜索查询,该查询在字符串中搜索单词并根据以下条件查找匹配项:

  • 该单词由空格、句号或逗号的组合包围
  • 单词位于字符串的开头,以空格、句点或逗号结尾
  • 该单词位于字符串末尾,后跟空格、句点或逗号
  • 这是一个完整的匹配,即整个字符串只是单词

例如,如果单词是“php”,则以下字符串将匹配:

  • php
  • mysql、php、javascript
  • php.mysql
  • javascript PHP

但是例如它不匹配:

  • php5

我尝试了以下查询:

SELECT * FROM candidate WHERE skillset REGEXP '^|[., ]php[., ]|$'

但是这不起作用,它会将每条记录作为匹配项返回,这是错误的。

没有 ^|和 |$ 在那里,即

SELECT * FROM candidate WHERE skillset REGEXP '[., ]php[., ]'

它成功地找到了“php”位于字符串中除字符串开头和结尾之外的位置的匹配项。所以问题一定出在 ^| 上和 |$ 正则表达式的一部分。

如何添加这些条件以使其按要求工作?

最佳答案

尝试 '\bphp\b'\b 是一个单词边界,可能正是您所需要的,因为它会查找整个单词 php。

对于 MySQL,单词边界用 [[:<:]] 和 [[:>:]] 表示,而不是\b,因此使用查询 '[[:<:]]php[[:>:] ]'。有关字边界的更多信息 here.

关于mysql - mySQL 查询的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407180/

相关文章:

php - 如何从数据库中选择行并用复选框显示它们?

MySQL:在 WHERE 找到相似条目时选择最高列值

php - 结合 angular js 和 php - 将数据插入数据库失败

mysql - 分组依据但选择确切记录(如果存在)

php - mysql 表中两个选择查询的内连接

mysql - 使用另一个 SELECT QUERY 的结果更新 1 个 MYSQL 表

php - 如何在magento中创建属性

php - MySQL 中的唯一标识符

python - 在 Python 3 中使用 MySQLdb 进行参数化查询

php - PDO 保持 mysql 连接多长时间?