簡體   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