Regexp与mySQL查询的问题

时间:2018-01-23 17:03:55

标签: 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'除了字符串的开头和结尾之外,它在字符串中的某处。所以问题必须是^ |和| $正则表达式的一部分。

如何添加这些条件以使其按要求运行?

2 个答案:

答案 0 :(得分:1)

尝试'\bphp\b'\b是一个单词边界,可能只是你需要的,因为它寻找整个单词php。

对于MySQL,单词边界用[[:&lt ;:]]和[[:>:]]代替\ b表示,所以使用查询'[[:<:]] php [[:计算值:]]”。关于单词边界here.

的更多信息

答案 1 :(得分:1)

好吧,你可以用regex101.com玩一下

我发现哪些适合你的但不完全符合你的规则的是:

/(?=[" ".,]?php[" ".,]?)(?=php[\W])/

这使用前瞻操作符?=来执行AND 正则表达式的第一部分是

[" ".,]?php[" ".,]?

这将匹配在php之前或之后有空格,句号或逗号的任何内容,但最多只能匹配一个。

正则表达式的部分部分是

php[\W]

这将匹配任何php,后跟非字符。换句话说,它不会匹配php后跟字符,数字或下划线。

这不是您的规则集的完美答案,但它确实适用于您的示例数据集。在regex101.com上玩游戏并尝试制作一个完美的。