繁体   English   中英

使用正则表达式替换 Pre 标签内的 Html

[英]Replace Html inside Pre tag using Regex

如何在 pre 标签内替换 Html? 我更愿意用 Regex 做到这一点

<html>
<head></head>
<body>
<div>
<pre>

    <html>
    <body>
    -----> hello! ----< 
    </body>
    </html

</pre>
</div>
</body>

编辑:如另一个答案所示,正则表达式不完全支持 HTML 或 XHTML,因此最好使用 HTML 解析器。 不过,我将我的答案留在这里以供参考。

你想用什么替换预标签内的内容?

我不熟悉特定的 C# 语法,但如果 C# 使用 Perl 样式的正则表达式,以下 PHP 代码段可能会有所帮助。 下面的代码将用字符串“(pre tag content was here)”替换 pre-tag 内的内容(刚刚用命令行 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修饰符指定“Unicode-character-support”和“single-line support”。 后者很重要. 也匹配换行符。 [^<>]*部分用于支持 pre 标签中的属性,例如<pre class="some-css-class"> (它将匹配除<>之外的任意数量的字符。

更新:正如Martinho Fernandes在下面的评论中所指出的,上述正则表达式的 C# 语法应该类似于:

new Regex(@"(.*?)<pre[^<>]*>(.*?)<\/pre>(.*)", RegexOptions.SingleLine)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM