繁体   English   中英

如何在mysql触发器中使用正则表达式查找和替换某些内容

[英]how to find and replace inbetween something with regex in a mysql trigger

我已将来自 4 个不同论坛数据库的 4 个聊天与触发器关联,现在我想发出命令以触发匿名公告,我在此处输入“/msg 消息”

这是表列中的示例消息

(AGN)[color=#EEFD01]this is a message example[/color]
(ND)[color=#1EB101]this is a message example[/color]

开头圆括号中的字母代表消息来自哪个论坛。

到目前为止,这是我的触发器:

CREATE TRIGGER agn_sign_chat BEFORE INSERT ON dark_taigachat FOR EACH ROW BEGIN
IF (INSTR(NEW.message,"/msg") > 0) THEN
SET NEW.message = CONCAT("(!) ", NEW.message);
SET NEW.message = REPLACE(NEW.message,"/msg ","");
SET NEW.username = "ANNOUNCEMENT";
SET NEW.user_id = 996;
//HERE I WANT TO REPLACE COLOR TAG IN MESSAGE TO #fd0101 (RED)
ELSEIF (INSTR(NEW.message,"(") != 1) THEN
SET NEW.message = CONCAT("(AGN) ", NEW.message);
END IF ;
END ; 

ElSEIF 只是处理论坛标志,它在 IF 下我将消息详细信息更改为看起来像一般公告消息。

它可以工作,但将字体颜色保持为我的个人字体颜色,因此我想将其替换为红色,例如#fd0101。 如果我使用此 /msg 命令新人的字体颜色,我可以使用 RePLACE() 将他的颜色与红色交换,但颜色值会有所不同,所以我猜我需要使用 REGEX,我已经使用了几次选择 mysql 数据库中的东西,但从未在触发器中使用过。 是否有可能做到这一点? 也许这样的事情会选择颜色 #([0-9]|[AF]) 但如何找到和替换它?

感谢您的时间

尝试/(color=#\\w*)/g regex 并用适当的颜色替换它,例如color=#fd0101

好用http://regexr.com/3aov5来检查

如果有帮助,请将其标记为答案:)

抱歉,MySQL 中没有正则表达式替换功能。

您需要使用某种客户端语言(PHP、Java 等)来执行此操作。

SET NEW.message = REGEXP_REPLACE(NEW.message, '\\#([a-fA-F]|[0-9]){3,6}', '\\#fd0101')

从理论上讲,它应该有效。 至少 PhpMyAdmin 需要双重转义“\\\\”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM