0

次の XML ドキュメントがあるとします。

<root>
    <myGoodSection 
          some="attr" 
          another="attr" 
      />
    <myBadSection yet="anotherattr" />
</root>

正規表現を使用して最初のものを返すにはどうすればよい/>ですか? これまでのところ、次の式を使用してかなり近づくことができました。

(?ims)(?<=<myGoodSection.*?)/>

ただし、これは/>の最初の出現に続く のすべてのインスタンスに一致します<myGoodSection。また、式を貪欲にしないようにするために、否定的な後読みと組み合わせてみましたが、効果がないようです。

(?ims)(?<=<myGoodSection.*?)(?<!/>)/>

編集:

正規表現の置換を処理するために、C# の上に構築されたツールを使用しています。System.Text.RegularExpressions直接使用していた場合のように、使用できるマッチの数と使用できないマッチの数を制御することはできません。私が使用しているエンジンがサポートする機能を明確にするために、ここで C# を参照します。

はい、一般的な慣行として、XML の解析に RegEx を使用すべきではないことは承知しています。私の現在の範囲、要件、および制約を考慮して、それが完全に受け入れられるソリューションであると規定しましょう (実際にそれを達成する方法がある場合)。

4

2 に答える 2

1

最終的な表現が次のようになるように、を置き換えること.でこれを達成できました。\b[^>]

(?ims)(?<=<myGoodSection\b[^>]*?)/>

/>これは、プレフィックスがどこにも含まれていない限り、終了にのみ一致し>、最初の一致に続くすべてのタグが除外されます。

于 2013-04-22T18:21:34.937 に答える