MySQL正则表达式搜索和替换[重复]

Posted

技术标签:

【中文标题】MySQL正则表达式搜索和替换[重复]【英文标题】:MySQL Regex Search and replace [duplicate] 【发布时间】:2014-04-20 17:43:12 【问题描述】:

我想从我的数据库中的所有图像中删除高度属性。他们的标记如下:

<img src="path/img.jpg"   />

我打算这样做:

UPDATE jos_content SET introtext = REPLACE(introtext, '', '');

但我不知道如何在 mysql 查询中使用正则表达式。我确实发现它们存在,我只是不知道如何在这种情况下使用它们。

【问题讨论】:

【参考方案1】:

Source

试试下面

DELIMITER $$
CREATE FUNCTION  `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))

RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN 
 DECLARE temp VARCHAR(1000); 
 DECLARE ch VARCHAR(1); 
 DECLARE i INT;
 SET i = 1;
 SET temp = '';
 IF original REGEXP pattern THEN 
  loop_label: LOOP 
   IF i>CHAR_LENGTH(original) THEN
    LEAVE loop_label;  
   END IF;
   SET ch = SUBSTRING(original,i,1);
   IF NOT ch REGEXP pattern THEN
    SET temp = CONCAT(temp,ch);
   ELSE
    SET temp = CONCAT(temp,replacement);
   END IF;
   SET i=i+1;
  END LOOP;
 ELSE
  SET temp = original;
 END IF;
 RETURN temp;
END$$
DELIMITER ;

然后运行更新查询

UPDATE jos_content SET introtext = regex_replace('', '',introtext);

【讨论】:

为什么是REPLACE( 而不是regex_replace( @Sharky 我已经做出改变... 成功了!但是一个功能的庞然大物。我认为在 mysql 中使用正则表达式就像 123 一样简单。 我对它的工作原理有点困惑。我正在阅读它的方式,它一次循环一个字符,并针对每个单独的字符检查正则表达式。因此,它会检查字母“h”是否与height=".*" 的正则表达式匹配,当然它不匹配——那么这怎么能工作呢?我一定是错过了什么。 这与正则表达式替换不完全一样,因为匹配的字符数量可能不同,此代码中没有这样做的逻辑。当我测试时,我专门添加了 ^ 以仅匹配字符串的开头,但它仍然替换末尾的数字。

以上是关于MySQL正则表达式搜索和替换[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用REPLACE和正则表达式替换MYSQL中字符串中的多个关键字[重复]

MySQL之正则表达式(REGEXP)

notepad正则怎么替换其中一部分

没有正则表达式的简单搜索和替换

正则表达式

sh 查找,过滤,搜索,替换和正则表达式