使用正则表达式替换 Pre 标记内的 Html
Posted
技术标签:
【中文标题】使用正则表达式替换 Pre 标记内的 Html【英文标题】:Replace Html inside Pre tag using Regex 【发布时间】:2011-06-28 07:48:08 【问题描述】:如何替换 pre 标签中的 html?我更愿意用正则表达式来做到这一点
<html>
<head></head>
<body>
<div>
<pre>
<html>
<body>
-----> hello! ----<
</body>
</html
</pre>
</div>
</body>
【问题讨论】:
不知何故,这听起来是个坏主意。如果有人能说出这个问题的真正含义。 对于初学者来说,这甚至看起来都不是有效的 HTML。 您没有说明结果应该是什么样子或输入是什么样子(您的临时样本可能无法反映现实),它来自哪里以及为什么要使用正则表达式。在这种形式下,这几乎不是问题。 我同意.. 有什么问题?您想更改和中的文本? 您最好告诉我们更多背景知识,以便我们提供一个体面的解决方案 【参考方案1】:
RegEx match open tags except XHTML self-contained tags
谢谢马蒂尼奥·费尔南德斯
【讨论】:
【参考方案2】:编辑: 正如另一个答案所示,正则表达式不完全支持 HTML 或 XHTML,因此最好使用 HTML 解析器。不过,我将把答案留在这里以供参考。
你想用什么替换前置标签中的内容?
我不熟悉特定的 C# 语法,但如果 C# 使用 Perl 样式的正则表达式,以下 php-sn-p 可能会有所帮助。下面的代码会用字符串“(pre tag content was here)”替换pre-tags里面的内容(刚刚用命令行PHP客户端测试过):
<?php
$html = "<html><head></head><body><div><pre class=\"some-css-class\">
<html><body>
-----> hello! ----<
</body></html
</pre></div></body>"; // Compacting things here, for brevity
$newHTML = preg_replace("/(.*?)<pre[^<>]*>(.*?)<\/pre>(.*)/Us", "$1(pre tag content was here)$3", $html);
echo $newHTML;
?>
?
标记是为了使匹配不贪婪(在第一次出现之后停止),mU
modifiers 指定“Unicode-character-support”和“single-line support” .后者对于使 .
匹配换行符也很重要。 [^<>]*
部分用于支持pre标签中的属性,例如<pre class="some-css-class">
(它将匹配除<
或>
之外的任意数量的字符。
更新:如以下 cmets 中的 Martinho Fernandes 所示,上述正则表达式的 C# 语法应类似于:
new Regex(@"(.*?)<pre[^<>]*>(.*?)<\/pre>(.*)", RegexOptions.SingleLine)
【讨论】:
为示例工作。<pre class="fail">foo</pre>
失败。不过,不知道这对 OP 是否重要。
啊,真的。将修改我的答案。
@Marthinho & Samuel:简单地删除 和 \@Levisaxos:没错,这会起作用,但会有点明确(如果任何其他标签以“pre”开头)。使用允许在 pre 标记中包含任意数量的非 字符的解决方案进行了更新。
<pre crazy=""</pre>FAIL""><!-- </pre> Fail AGAIN! --></pre>
。说真的,stop trying.以上是关于使用正则表达式替换 Pre 标记内的 Html的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式替换 Notepad++ 中标签之间的文本
PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性。
如何使用 PL/SQL 正则表达式将 HTML 标记及其内容替换为相同数量的“?s”?