notepad++中删除html标签应使用]*>而非,因后者贪婪匹配会导致误删整段;需分步处理script/style块、注释及html实体等残留内容。

Notepad++ 里用正则匹配并删除 HTML 标签的通用写法
直接用 ]*> 就能匹配绝大多数单个 HTML 标签(包括自闭合标签如 <br>、<img src="...">),替换为空即可。这个表达式意思是:从 开始,匹配任意非 <code>> 字符,直到遇到第一个 > 结束。
注意它不处理嵌套标签(HTML 本身也不该嵌套标签),也不匹配注释 <!-- ... --> 或 DOCTYPE,但日常清理网页源码片段够用。
为什么 <.></.> 会出错?
因为 .* 是贪婪匹配,碰到长文本时会从第一个 一直吃到**最后一个** <code>>,中间所有标签全被包进去,一次删掉一大段,甚至跨行失效(默认不匹配换行符)。
- 错误示例:
<p>hello<b>world</b>.</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/92" title="Notepad++ Windows版"><img src="https://img.php.cn/upload/manual/001/589/237/6a698eaa6a25a149.png" alt="Notepad++ Windows版" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/gongju/92" title="Notepad++ Windows版" class="overflowclass">Notepad++ Windows版</a> <p class="overflowclass">Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。</p> </div> <a rel="nofollow" href="/xiazai/gongju/92" title="Notepad++ Windows版" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>→<.></.>会匹配整行,只剩hello<b>world</b>.(实际什么都没删成) - 正确做法:用
]*>,每遇到一个>就停,逐个清除 - 如果文本含换行,勾选
. matches newline(但此时仍推荐用[^>\r\n]*更安全)
想保留标签里的文字,只删标签本身?
用「查找」模式:]*>,「替换为」:\2 或空 —— 这不对,那是想提取标签名。真要留文字删标签,得用反向引用:
查找:]*>([^]*>,替换为:$1,但这只适用于成对且无嵌套的简单标签(如 <p>text</p>)。更稳妥的是分两步:
- 先删所有闭合标签:
?[a-zA-Z][^>]*> - 再手动清理残留(比如
、<等实体,需另加替换)
实际清理网页文本时容易漏掉的点
纯删标签只是第一步。真实网页文本常混着这些:
-
、—等 HTML 实体 → 单独替换为对应字符或空格 - 连续空白(\r\n\t + 多个空格)→ 用
[ \t\r\n]+替换为单个空格 - script/style 块内容 → 先用
<script>[\s\S]*?</script>(?i)>和同理<style.>[\s\S]*?</style.>清掉整块(注意勾选. matches newline) - 注释:
<!--[\s\S]*?-->,也需单独处理
别指望一条正则干完所有事;标签结构越乱,越得拆成多轮替换,每次只解决一类问题。










