無効な HTML タグ間のスペースを削除する正規表現 - 例: 「</b>」は「</b>」である必要があります。
P粉884667022
2023-09-02 19:56:28
<p>タグ内のスペースによって破損した HTML があり、それを再度有効にしたいと考えています。例: </p>
<pre class="brush:php;toolbar:false;">< div class='test' >1 > 0 は < b >true</ b>、リンゴ >>>バナナ< / div ></pre>
<p> は有効な HTML に変換される必要があり、レンダリングされると次のものが生成されることが期待されます: </p>
<p>
<pre class="snippet-code-html lang-html prettyprint-override"><code><div class='test'>1 > 0 は <b>true</b> とリンゴ>>> バナナ</div></code></pre>
</p>
<p><code>></code> または </code>><</code> 内のスペースの前後にあるテキストは変更しないでください (例: <code> ;1) > 0 は、1>0
に圧縮されるのではなく、保持される必要があります。
<p>これにはいくつかの正規表現が必要になる場合がありますが、問題ありません</p>
<p>いくつかのことがあります:</p>
<p><code><\s?\/\s*</code> これにより、部分的に <code></ b></ div ></code> が < code> に修正されます。 ;</b></div></code> ですが、残りは現在作業中です< /p>
<p>たとえば、思い切ったアプローチを取ることもできますが、そうするとラベル名自体ではなく、ラベル テキスト部分内のコードも壊れてしまいます</p>
あなたが投稿したものと同じように破損したドキュメントを保存する合理的な方法はありませんが、テキスト内の
リーリー# および類似の文字を関連するエンティティに置き換えると仮定します。例:
> ;
の場合、受け入れたいドキュメントを、残りを処理する DomDocument などの適切なライブラリに入れることができます。出力:
リーリー次の正規表現も有効です:
HTMLタグ内の有効部分を4つに分割し、残りの部分(スペース)をそれらに置き換えます。
Regex101 デモ
/(]*\S)\s*(>)/g
( - 開始山かっこをキャプチャします (セクション 1)
\s*
- 任意の空白文字と一致します(\/?)
- オプションのバックスラッシュのキャプチャ (パート 2)\s*
- バックスラッシュの後の任意のスペースと一致します([^]*\S)
- 末尾のスペースなしでタグ内のコンテンツをキャプチャします (セクション 3)\s*
- コンテンツの後および閉じ山括弧前のスペースと一致します(>)
- 直角括弧のキャプチャ (セクション 4)