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

时间:2015-04-07 03:32:59

标签: mysql regex triggers chat

我已将来自4个不同论坛数据库的4个聊天与触发器相关联,现在我想命令触发匿名通知我输入“/ msg message here”

以下是表格列

中的示例消息
(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] | [A-F])但是如何找到并替换它?

谢谢你的时间

3 个答案:

答案 0 :(得分:0)

尝试/(color=#\w*)/g正则表达式并将其替换为适当的颜色,例如color=#fd0101

很高兴使用http://regexr.com/3aov5来检查

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

答案 1 :(得分:0)

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

您需要以某种客户端语言(PHP,Java等)来实现。

答案 2 :(得分:0)

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

理论上,它应该可以工作。 至少 PhpMyAdmin 需要双重转义 "\\"