1

でタグ付けされた XML ファイル内のすべての名前を、xyz としましょう。つまり、タグ間のすべて (空白を含む) を置き換えます。私は何を間違っていますか?

Search: (<name>)(.*)(</name>)
Replace: \1xyz\3
4

1 に答える 1

13

XML を正規表現で解析しようとしています。

ただし、とにかく間違っているのは、貪欲な繰り返しの使用です。これは、一致条件を満たしながら可能な限り消費しようとするため、最初<name>から最後まで</name>(それらが一緒に属していなくても)続きます.. 代わりにこれを使用してください:.*

Search: (<name>).*?(</name>)
Replace: \1xyz\2

<または、安全のためにandをエスケープすることもできます。>これは、特定のケースではメタ文字であるためです (ただし、これには当てはまりません)。

Search: (\<name\>).*?(\</name\>)
Replace: \1xyz\2

どちらの場合も、これは.*欲張りにならないようにします。つまり、消費をできるだけ少なくします。

また、必ず Notepad++ 6 にアップグレードしてください。それ以前は、Notepad++ の正規表現エンジンにいくつかの問題があったためです。

最後に、コメントで hoombar が指摘しているように、デフォルトでは改行文字を除く.すべての文字に一致します。Notepadd++ では、チェックボックスをオンにすることでこの動作を変更できます。. matches newline

于 2012-11-02T12:29:45.110 に答える