1

次のようなテキストがあります。

...<span>my name is bob and I live in </p><p>America</span>...

このテキストを

...<span>my name is bob and I live in </span></p><p><span>America</span>...

replace() 関数は知っていますが、正規表現はよくわかりません。どうすればこれを行うことができますか?

の前に他の span タグを正しく閉じることができることに注意してください</p>。次に例を示します。

...<span>my name is bob</span> and <span>I live in </p><p>America</span>... 
4

2 に答える 2

3

通常、HTML は通常の言語ではないため、正規表現を使用して解析することはできません。

特定の場所で文字列を生成していて、それが単なる値そのものであることがわかっている場合、これは可能かもしれません。ただし、その場合、単なる CDATA であるはずのものにタグを埋め込みたくないため、クリーンである可能性は低いです。タグを含むドキュメントの解析を開始すると、一般に、ケースをキャプチャする適切な正規表現を作成することは不可能です。ドキュメントが非常に制限された構文を使用している場合は可能かもしれませんが、将来のリファクタリングを考えると、誰もがこれらの制限を強制することを覚えているとは思えないため、これには注意が必要です。

より良い解決策は、DOM のようなものを使用して、実際に生成された HTML 自体を繰り返し処理し、ノード ツリーを変更することです。または、実際に純粋な XHTML を出力している可能性が低い場合は、XSLT を使用してこの変換を行うことができます。

于 2010-06-23T11:49:21.503 に答える
0

これは恐ろしい非解決策ですが、String.replace(CharSequence, CharSequence)文字列の置換を実行するために使用できます。HTML などの整形式を考慮していません。ある文字列を別の文字列に盲目的に置き換えているだけです。

これはうまくいくかもしれませんし、うまくいかないかもしれません。ただし、HTML に対する他の正規表現のアプローチと同様に、それが機能するのはおそらくあるときだけです。

System.out.println(
    "bleh </p><p> blah </p><p> blih </p></p> bloh"
    .replace("</p><p>", "</span></p><p><span>")
);
// "bleh </span></p><p><span> blah </span></p><p><span> blih </p></p> bloh"
于 2010-06-23T11:58:57.730 に答える