默认情况下,DedeCMS 的内容替换功能是进行普通文本匹配,不支持正则元字符(如 , , , 等),要启用正则匹配,您需要在替换规则的“替换范围”或类似选项中勾选“正则表达式”或“正则模式”。

(图片来源网络,侵删)
下面我将为您详细解释如何在 DedeCMS 的不同场景下使用正则表达式进行替换,并提供详细的示例。
核心要点:如何启用正则模式?
无论在哪个后台模块进行替换,您都会在替换规则的表单中找到一个关键选项。请务必勾选它:
- 选项名称:通常是“正则表达式”、“正则模式”或“支持正则表达式”。
- 勾选后:系统会将您在“查找内容”框中输入的文本视为正则表达式,而不是普通字符串。
替换”功能中使用正则(最常用)
这是 DedeCMS 中最核心的批量替换功能,适用于全站文章内容的修改。
操作路径:登录后台 -> 系统 -> SQL命令行工具 -> 内容替换

(图片来源网络,侵删)
示例1:移除文章内容中的内联样式(例如移除所有 style="...")
- 目标:删除文章中所有
<p style="color:red;">这类带内联样式的标签。 - 操作:
- 替换”页面。
- 栏目选择:选择要替换的栏目,或者选择“所有栏目”。
- 请选择替换范围:勾选“正则表达式”。
- :输入以下正则表达式:
style="[^"]*"
style=:匹配style=字符串。- 匹配一个双引号。
[^"]*:这是一个核心部分。[]:定义一个字符集。^":在字符集开头加^表示“非”引号。- 表示匹配前面的字符集零次或多次。
[^"]*的意思是“匹配任意数量的非引号字符”,这正好能匹配color:red; font-size:14px;这样的样式内容。
- 匹配结尾的双引号。
- :这里留空,表示删除找到的内容。
- 替换HTML源码:勾选此项,因为我们修改的是 HTML 源码中的标签属性。
- 点击“开始替换”按钮。
示例2:统一替换文章中的图片路径
- 目标:将文章中所有旧域名
old.com的图片路径替换为新域名new.com。 - 操作:
- 替换”页面,勾选“正则表达式”和“替换HTML源码”。
- :
src="[^"]*old\.com[^"]*"
src=":匹配src="。[^"]*:匹配非引号的任意字符(图片路径的前半部分)。old\.com:注意 在正则中是特殊字符(匹配任意单个字符),所以要用\进行转义,变成\.来匹配真正的点号。[^"]*:匹配非引号的任意字符(图片路径的后半部分)。- 匹配结尾的引号。
- :
src="https://new.com$0"
src="https://new.com:替换后的新域名前缀。$0:这是一个反向引用,代表“匹配到的整个字符串”,这样做的目的是保留原路径中old.com之后的部分(/uploads/image/2025/abc.jpg),只替换域名。$0等同于整个src="..."的内容。
示例3:移除文章中的超链接但保留文字
- 目标:将
<a href="https://example.com">点击这里</a>替换为点击这里。 - 操作:
- 替换”页面,勾选“正则表达式”和“替换HTML源码”。
- :
<a\b[^>]*>(.*?)</a>
<a\b:匹配<a标签的开头,\b表示单词边界,避免匹配到<article>这样的标签。[^>]*:匹配>之前的任意字符(即href="..."等所有属性)。>:匹配>标签结束符。- 这是一个捕获组。
- 匹配除换行外的任意字符。
- 非贪婪匹配,匹配尽可能少的字符,直到遇到后面的模式。
- 圆括号 的作用是“捕获”这部分内容,以便在替换时引用。
</a>:匹配</a>结束标签。
- :
$1
$1:引用第一个捕获组 的内容,也就是超链接内部的文字。
在“自定义表单”数据替换中使用正则
如果您需要替换通过自定义表单提交的数据,操作路径如下:
操作路径:登录后台 -> 核心 -> 内容模型管理 -> 选择您的自定义表单 -> 数据替换
这里的界面和功能与“内容替换”非常相似。关键同样是勾选“正则表达式”,然后根据您要处理的字段内容编写正则表达式,替换表单中提交的手机号格式、邮箱地址等。
使用“批量维护”中的SQL命令进行正则替换
对于更复杂的、需要直接操作数据库的情况,可以使用 SQL 命令,这里需要使用 MySQL 的正则函数 REGEXP 或 RLIKE。

(图片来源网络,侵删)
⚠️ 警告:此方法风险极高!请务必备份数据库后再操作!
操作路径:登录后台 -> 系统 -> SQL命令行工具
示例:使用 SQL 替换文章正文 body 字段中的内容
假设您想将文章 body 字段中所有 <span class="highlight"> 标签替换为 <strong>。
UPDATE `dede_addonarticle` SET body = REPLACE(body, '<span class="highlight">', '<strong>'); UPDATE `dede_addonarticle` SET body = REPLACE(body, '</span>', '</strong>');
这个例子没有使用 REGEXP,因为 REPLACE 函数更简单直接,但如果要匹配的模式更复杂,就需要用 REGEXP 配合函数来实现,
-- 这是一个更复杂的例子,旨在展示 REGEXP 的用法,实际替换可能需要结合程序处理 UPDATE `dede_addonarticle` SET body = REGEXP_REPLACE(body, '<span\s+class="highlight"\s*>(.*?)</span>', '<strong>$1</strong>');
- 注意:标准的 MySQL 5.7.6+ 版本支持
REGEXP_REPLACE函数,但很多虚拟主机或旧版本的 DedeCMS 可能不支持,如果遇到不支持的情况,此 SQL 将会报错,对于绝大多数用户,推荐使用场景一的“内容替换”功能,它更安全、更友好。
常用正则表达式速查表
| 用途 | 正则表达式 | 说明 |
|---|---|---|
| 移除所有内联样式 | style="[^"]*" |
匹配 style="任意非引号字符" |
| 移除所有内联JS | on\w+="[^"]*" |
匹配 onclick="...", onload="..." 等 |
| 匹配所有图片标签 | <img\b[^>]*> |
匹配 <img ...> 整个标签 |
| 匹配所有超链接标签 | <a\b[^>]*>.*?</a> |
匹配 <a>...</a> 整个标签,非贪婪 |
| 匹配并捕获链接文字 | <a\b[^>]*>(.*?)</a> |
捕获组 $1 就是链接的文字 |
| 移除特定class的div | <div\s+class="my-class"[^>]*>.*?</div> |
匹配并移除 <div class="my-class">...</div> |
| 替换域名 | src="[^"]*old\.com[^"]*" |
将 old.com 替换为新域名时使用 |
| 匹配绝对路径 | ["']https?://[^"']*["'] |
匹配 https://... 或 'http://...' |
总结与最佳实践
- 勾选是关键:在任何 DedeCMS 替换功能中,要使用正则,第一步就是找到并勾选“正则表达式”选项。
- 先备份:对于全站替换,特别是使用“内容替换”功能,强烈建议先手动备份数据库,以防万一替换出错。
- 小范围测试:如果不确定正则表达式是否正确,可以先选择一个不重要的栏目或几篇测试文章进行替换,确认效果无误后再全站操作。
- 善用反向引用:在需要保留部分匹配内容时,
$0(整个匹配),$1,$2(捕获组) 是非常强大的工具。 - 优先使用“内容替换”:对于文章内容的修改,优先使用“系统 -> SQL命令行工具 -> 内容替换”功能,它最安全、最符合 DedeCMS 的设计逻辑。
希望这份详细的指南能帮助您在 DedeCMS 中自如地使用正则表达式进行内容替换!
