我正在尝试构建一个搜索查询,该查询在字符串中搜索单词并根据以下条件查找匹配项:
- 该单词由空格、句号或逗号的组合包围
- 单词位于字符串的开头,以空格、句点或逗号结尾
- 该单词位于字符串末尾,后跟空格、句点或逗号
- 这是一个完整的匹配,即整个字符串只是单词
例如,如果单词是“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/