首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MySQL选择与嵌入在字符串中的RegEx表达式一起使用

将MySQL选择与嵌入在字符串中的RegEx表达式一起使用
EN

Stack Overflow用户
提问于 2021-05-18 08:21:29
回答 1查看 45关注 0票数 0

我使用PHP访问mysql数据库字段,每条记录最多包含2500个字符。我希望构建的查询将只返回包含单个单词的记录,如“taco”。

然而,有时用户需要搜索像“jalapeno”这样的单词。除了jalapeno可能以'jalapeno‘或'jalapeño’的形式存在于数据库之外。查询应该返回两个实例。

更复杂的是,用户可能还需要搜索像“creme”这样的词,它可能会出现为“creme”或“créme”,但绝不会出现为“crémé”。

看起来我应该能够构造一些东西,它使用一个替换,然后是一个正则表达式,这样字母'n‘总是被替换为'n|ñ',然后搜索一个带有嵌入正则表达式的字符串,比如:'jalapen|ño’。除非那不起作用。MySQL将RegEx语法视为文字。

以下所有结果都不会返回我要查找的结果:

代码语言:javascript
复制
SELECT id, record FROM table WHERE record like '%jalapeno%';

SELECT id, record FROM table WHERE record REGEXP 'jalapeno';

SELECT id, record FROM table WHERE record REGEXP 'jalape[n|ñ]o';

SELECT id, record FROM table WHERE REGEXP_LIKE(record, 'jalape[n|ñ]o', 'im');

此外,我可以使用PHP来替换潜在的字符,但最终得到的结果如下: SELECT id,record FROM table WHERE (记录如'%creme%‘||记录如'%crémé%');

我可以使用这样的搜索,但以编程方式构建它似乎过于复杂:

代码语言:javascript
复制
SELECT id, record FROM table WHERE (record like '%creme%' || record like '%crémé%' || record like '%cremé%' || record like '%cremé%' );

有没有一个MySQL方法可以提供一个嵌入到字符串中的REGEX 'OR‘?可能是这样的:

代码语言:javascript
复制
SELECT id, record FROM table WHERE record like '%cr[e|é]m[e|é]%' ;

或者,是否有其他解决方案不需要构造过于复杂的SQL语句?

EN

回答 1

Stack Overflow用户

发布于 2021-05-18 13:33:52

感谢那些花时间试图弄清楚这一点的人。

如上所述,对于当前版本,REGEXP_LIKE()似乎不是一个有效的MySQL函数。

这是我的解决方案;请注意,这适用于MySQL 5.7.x。

SELECT id, record FROM table WHERE record RLIKE 'jalape(n|ñ)o';

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67578452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档