You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写MySQL REGEXP查询忽略句子末尾句号实现匹配

问题原因

你当前的正则仅允许关键词jesus wept后紧跟空格或直接到文本末尾,而实际存储的经文句尾关键词后带有句号,无法匹配规则所以返回空结果。

修改方案

调整正则表达式,在关键词末尾增加可选的句号匹配逻辑即可,修改后的完整查询如下:

SELECT DISTINCT vm.volume_name,vm.recno AS vmid,bk.book_name
       ,bk.recno AS bid,vs.recno,vs.chapter,vs.verse,vs.text 
FROM verses vs 
LEFT JOIN books bk ON bk.recno=vs.book 
LEFT JOIN volumes vm ON bk.volumeid=vm.recno 
WHERE vs.text regexp "(^|[[:space:]])jesus wept\\.?([[:space:]]|$)" 
AND vm.recno IN(1,3,4,5)

规则说明

新增的\\.?逻辑:

  • \\. 转义匹配句号字符
  • ? 限定前面的句号仅匹配0次或1次,也就是允许关键词末尾带或者不带句号
  • 保留了原有前后边界校验逻辑,不会匹配到包含关键词的更长单词

可选优化

如果需要适配用户大小写混用的搜索场景(比如用户输入Jesus Wept也能命中),可以改用大小写不敏感的匹配函数,以MySQL为例可以调整WHERE条件为:

WHERE REGEXP_LIKE(vs.text, "(^|[[:space:]])jesus wept\\.?([[:space:]]|$)", 'i')

内容的提问来源于stack exchange,提问作者Jeff Forrester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:36:00