2017-07-08 15 views
-2

私は上記XML...手段からのこのような構造を持つXMLファイルregexp検索からいくつかの単語を除外する方法は?

<item><rank>15</rank>...<price>100</price></item> 
<item><rank>15</rank>...<price>200</price></item> 
<item><rank>15</rank>...<price>500</price></item> 

あります。だから私はアイテムを見つける必要がある

(任意のタグでもよい)何とか項目を説明し、いくつかの異なるタグをprice=500で、rankを置き換えてください。

<item><rank>\d+<\/rank>(.*)<price>500<\/price><\/item> 

しかし、こののRegExpは終わりに最初<item><price>500</price></item>から始まるこれらの3つのタグのコンテンツもあります。

</item>(.*)から除外する必要があります。

+4

xmlパーサを使用します。 –

+0

キャプチャグループを使用しますか? [this](https://regex101.com/r/Ohr3Wa/1) –

+1

どのようなプログラミング言語を使用していますか? –

答えて

0

は、括弧を使用してthis regex

/(?:<item>(?:<rank>(\d+)<\/rank>)(?:(?!<\/item>).)*(?:<price>500<\/price>)<\/item>)/igm 

を参照してください、あなたはグループをキャプチャ作成します。 ?:は非キャプチャグループです(コンテンツに興味がないことを意味します)。
igmは、大文字と小文字を区別しない、グローバルであること、複数行であることを意味します。
(?!sth)は否定的な先読みです。つまり、sthを破棄します。ステップバイ

ステップ:(外側のタグから)

(?:<item> ... <\/item>) # we're interested in things beginning with <item> and ending with </item> and we're not capturing the group 

... (?:<rank>(\d+)<\/rank>) ... # there's a rank tag, we're not capturing it, but we're capturing the digits within the tag 

... (?:(?!<\/item>).)* ... # the crux of the problem, we're looking at any character except <\/item> 

... (?:<price>500<\/price>)<\/item>) # the "line" ends with these tags 

はそれが助け願っています。

関連する問題