-2

重複の可能性:
正規表現は、XHTML の自己完結型タグを除く開始タグに一致します

<b>, <i>通常の意味を持つタグもある任意の XML 文字列があります。プレーンテキストのみで文字列置換を実行する必要があります。ノード定義の何も置き換えないでください。

たとえば、「こんにちは」を * に置き換えたいとします。XMLのようなもの<hello a="hello">text sayh<b>ell</b>o more text</hello>になる必要があります<hello a="hello">text say* more text</hello>

これを行う最善の方法は何ですか?のみを使用するつもりでしregexたが、質問は反対票を投じられました。

4

1 に答える 1

0

「次の山かっこが閉じ山かっこでない場合にのみ一致する」というルールを単純に実装する、非常に迅速で汚い (汚いことに重点を置いた) ソリューションは次のようになります。

hello(?![^<>]*>)

これは XML ファイルでは機能する可能性がありますが、有効な XML ではさまざまな方法で失敗する可能性があります (無効な XML ではさらに多くの場合)。

編集:

私の最初の回答以降、質問が大幅に変更されたため、回答は正しくありません。太字/斜体のタグを無視したい場合は、最初にそれらを完全に削除し、それらすべてを検索し</?[bi]>て空の文字列に置き換えてから、上記の正規表現を実行する必要があります (ただし、これにより 、内部のタグだけでなく、これらすべてhelloのタグが削除されます。または使用

</?[bi]>h</?[bi]>e</?[bi]>l</?[bi]>l</?[bi]>o</?[bi]>(?![^<>]*>)

上記の正規表現の代わりに。ここまでで、正規表現はこの種のタスクには信頼できるツールではないことがお分かりいただけたと思います。しかし、それはコメントからすでに明らかなはずです。

于 2013-01-27T08:12:15.473 に答える