我正在尝试构建搜索查询,搜索字符串中的单词并根据以下条件查找匹配项:
例如,如果单词是' php'以下字符串将匹配:
但是例如它不会匹配:
我尝试过以下查询:
SELECT * FROM candidate WHERE skillset REGEXP '^|[., ]php[., ]|$'
然而,这并不起作用,它会将每条记录作为匹配错误返回。
没有^ |和| $在那里,即
SELECT * FROM candidate WHERE skillset REGEXP '[., ]php[., ]'
成功找到匹配的地方' php'除了字符串的开头和结尾之外,它在字符串中的某处。所以问题必须是^ |和| $正则表达式的一部分。
如何添加这些条件以使其按要求运行?
答案 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上玩游戏并尝试制作一个完美的。