mysql - MySQL模式匹配以查找特定文本
问题描述
我的工作数据库来自网络论坛。在其中,有一个包含所有帖子数据的表格(即用户在线程中提交的文本)。这些帖子包含一个名为的列,该列message
是帖子的实际内容。帖子可以包含任何字符以及表情符号。表情符号用冒号表示,紧随其后的是可变长度的简短描述,然后是冒号。即:clap:
。一个帖子可以包含多个表情符号。
我正在尝试想出一种方法来拉出帖子表中所有表情符号的列表。
到目前为止,我所做的是一个查询,它会提取包含至少两个冒号的帖子列表:
SELECT
thread_id
, post_id
, SUBSTRING_INDEX(SUBSTRING_INDEX(message, ':', 2), ':', -1)
FROM
xf_post
WHERE
ROUND((CHAR_LENGTH(message) - CHAR_LENGTH(REPLACE(message, ':', ""))) / CHAR_LENGTH(':')) > 1
LIMIT 50
这可行,但也会返回消息,其中用户出于任何原因包含多个冒号,例如random : text followed : by more text
,或时间戳:00:00:12345
。
我希望实现的是返回所有出现在冒号之间的字母数字字符,没有任何空格。(是的,这将删除所有纯数字的表情符号,但是¯\_(ツ)_/¯
)。
我摆弄了REGEXP
,并想出了以下内容:[:][a-zA-Z]+(?=:)[:]
根据regex101产生的正是我想要的。
我如何使用它来捕获输出,并且只查看分号之间的值,并且最好以这样的方式显示单个帖子中所有出现的笑脸?
谢谢你。
解决方案
@SimonlucaLandi 至少帮助我弄清楚了显示结果的方法。我的最终查询:
SELECT
thread_id
, post_id
, REGEXP_SUBSTR(message, '':[a-zA-Z]+:'')
FROM
xf_post
WHERE
message REGEXP '':[a-zA-Z]+:''
LIMIT 50
推荐阅读
- python - 如何使用opencv实现matplotlib选线器?
- c# - 如何在 Entity Framework Code First 中使属性唯一
- inno-setup - Inno Setup 删除/隐藏/禁用自定义向导页面上的 NextButton
- reactjs - Devextreme react datagrid Sorting最大调用堆栈大小超出extend.js
- kubernetes - 入场 webhook 创建连接被拒绝错误 Minikube
- python-3.x - 为语料库中的某些文档分配更多权重 - LDA - Gensim
- openrefine - Openrefine - 由第二个或第三个候选人协调
- java - 触摸输入和带有 JavaFX 11 的 OpenJDK 11 的问题
- c# - 我应该使用什么样的数据库来跟踪模型铁路的操作?
- sql - 将 Access SQL 重建为 Oracle SQL 时找不到语法错误 - SQL 命令未正确结束