>比>更可靠,因为>用否定字符集锁死“尖括号内不能出现>`”这一html标签基本特征,天然避开属性值里的误解析风险。

为什么]*>比<.></.>更可靠
因为]*>用否定字符集锁死「尖括号内不能出现>」这个 HTML 标签基本特征,天然避开属性值里的(比如<code>alt="A ),也不会跨行误吞内容。而<code><.></.>在 Sublime 的 PCRE 引擎里默认不匹配换行符,遇到多行标签就断;更危险的是,它会把<script>console.log('<div>')</script>里的字符串也当标签删掉。
怎么提取所有标签内的纯文本(不含子标签)
目标是拿到<p>标题</p>里的“标题”,但跳过<p>标题<b>加粗</b>结尾</p>里的<b></b>——这种场景不能靠删标签再压空格,得精准捕获。
- 查找:
<p>([^</p>→ 适用于单层、无嵌套的<p></p>,[^确保不进子标签 - 通用写法(适配
<div>、<code><h2></h2>等):([^,用\1反向引用保证开闭标签一致 - 若内容含换行,
[^失效,改用<code><p>([\s\S]*?)</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a> <p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p> </div> <a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>并勾选.*模式(但要先手动剔除<script></script>和<style></style>块,否则[\s\S]会跨进去) - 先统一换行符:
(?:\r\n|\r|\n)+→\n,避免 CRLF/LF 混用 - 再补逻辑换行:对常见块级标签单独处理,比如
<p></p>→\n,→\n,<br>
→\n - 最后清理空行:
\n\s*\n→\n\n,别一次全替成单换行,否则列表项会糊在一起 - 嵌套不规范(如
<div><p>text</p></div>)会让正则漏删或错删 - 实体字符(如
、)不会被还原,结果里全是乱码符号 - 超过 500KB 的文件,Sublime 可能卡死或丢数据——它不是解析器,只是文本编辑器
- 真正要鲁棒提取,Python 里上
BeautifulSoup,浏览器环境用textContent+DOMParser,别硬刚
替换后文本粘连或空行乱飞怎么办
删完标签只剩裸文本,原来靠<p></p>分隔的段落就挤成一团,这不是正则写错了,是语义丢失了。
什么时候必须放弃 Sublime 正则
当你面对的是微信公众号推文、邮件正文、或爬虫抓回来的乱序 HTML 时,]*>只是临时止血贴。
正则能快,但快的前提是你清楚它的边界在哪;多数人卡住的地方,不是不会写.*?,而是没意识到自己正在拿螺丝刀修发动机。










