0

preタグ内のHtmlを置き換えるにはどうすればよいですか? 私は正規表現でそれをしたいと思います

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

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

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

2 に答える 2

0

RegExは、XHTML自己完結型タグを除くオープンタグと一致します

ありがとうmartinhofernandes

于 2011-02-16T12:40:27.957 に答える
0

編集:別の回答で示されているように、正規表現は HTML または XHTML を完全にはサポートしていないため、代わりに HTML パーサーを使用する方がよいでしょう。ただし、参照用にここに回答を残しています。

プレタグ内のコンテンツを何に置き換えますか?

私は特定の C# 構文に精通していませんが、C# が Perl スタイルの正規表現を使用している場合、次の PHP スニペットが役立つ場合があります。以下のコードは、事前タグ内のコンテンツを文字列 "(pre tag content was here)" に置き換えます (コマンド ライン 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 文字サポート」と「単一行サポート」を指定します。後者は、.改行も一致させるために重要です。この[^<>]*部分は、pre タグ内の属性をサポートするためのものです(または<pre class="some-css-class">を除く任意の数の文字に一致します。<>

更新:以下のコメントでMartinho Fernandesが示すように、上記の正規表現の C# 構文は次のようになります。

new Regex(@"(.*?)<pre[^<>]*>(.*?)<\/pre>(.*)", RegexOptions.SingleLine)
于 2011-02-16T12:35:56.090 に答える