首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用"#“符号使用正则表达式作为整个单词的一部分?

如何使用"#“符号使用正则表达式作为整个单词的一部分?
EN

Stack Overflow用户
提问于 2022-07-22 16:27:34
回答 1查看 51关注 0票数 -1

在内容中搜索作为单数单词(而不是单词的一部分)中的散列标签,如下所示:

代码语言:javascript
运行
复制
SELECT * FROM `messages` WHERE LOWER(`messages`.`content`) REGEXP '[[:<:]]#anxiety[[:>:]]'

它没有找到任何记录,但是搜索“焦虑”一词是有效的:

代码语言:javascript
运行
复制
SELECT * FROM `messages` WHERE LOWER(`messages`.`content`) REGEXP '[[:<:]]anxiety[[:>:]]'

寻找诸如“她不喜欢雷雨。#焦虑#紧张”之类的信息。

不想匹配像"abc#anxiety“这样的单词的部分。它应该在“我有#焦虑”、“焦虑糟透了!”或“这就是#焦虑的样子”之前,将“#焦虑”与“##”匹配起来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 16:34:00

我假设您使用的是MySQL 5.7,否则您的第一个查询也不会返回匹配。请参阅Regexp兼容性 8文档中的MySQL 8。

尽管如此,第二个查询不返回匹配,因为#是一个非字母数字字符,而[[:<:]]模式要求后面的字符是字母数字字符。所以这永远也比不上。事实上,仅仅存在#前缀就可以确保这种“焦虑”并不是左侧单词匹配的一部分,所以您应该这样做:

代码语言:javascript
运行
复制
SELECT * FROM `messages` 
WHERE LOWER(`messages`.`content`) REGEXP '#anxiety[[:>:]]'

在一条评论中,您说abc#anxiety不应该匹配(尽管从技术上讲,#已经打断了一个单词)。在这种情况下:

代码语言:javascript
运行
复制
SELECT * FROM `messages` 
WHERE LOWER(`messages`.`content`) REGEXP '(^|[^a-zA-Z0-9_])#anxiety[[:>:]]'

在字符类[^a-zA-Z0-9_]中,添加任何您不允许在#anxiety之前使用的字符。

如果您的目的是在前面找到带有可选 #的单词,那么使用前面的正则表达式并添加一个?

代码语言:javascript
运行
复制
SELECT * FROM `messages` 
WHERE LOWER(`messages`.`content`) REGEXP '(^|[^a-zA-Z0-9_])#?anxiety[[:>:]]'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73083408

复制
相关文章

相似问题

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