我的工作数据库来自网络论坛。其中有一个表格,其中包含帖子的所有数据(即用户在线程中提交的文本)。这些帖子包含名为message
的列,这是该帖子的实际内容。帖子可以包含任何字符以及表情符号。笑脸用冒号表示,紧随其后的是简短的可变长度简短说明,再用冒号表示。即:clap:
。一个帖子可以包含多个表情符号。
我正在尝试提出一种方法,以提取posts表中所有表情符号的列表。
到目前为止,我正在做的是一个查询,该查询提取了至少包含两个冒号的帖子列表:
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产生了我想要的东西。
如何使用它来捕获输出,并且仅查看分号之间的值,并且最好以这种方式显示单个帖子中出现的所有笑脸?
谢谢。
答案 0 :(得分:0)
@SimonlucaLandi至少帮助我弄清楚了显示结果的方式。我的最终查询:
SELECT
thread_id
, post_id
, REGEXP_SUBSTR(message, '':[a-zA-Z]+:'')
FROM
xf_post
WHERE
message REGEXP '':[a-zA-Z]+:''
LIMIT 50