回答済み:
この正規表現は機能します:
<item>(?:(?!</item>).|\n)*?(?:(?=201[0-3]</pubDate>))(?:(?!</item>).|\n)*?</item>
これはスタックをクラッシュさせますが:
<item>(?:(?!</item>).|\n)*(?:(?=201[0-3]</pubDate>))(?:(?!</item>).|\n)*</item>
これも、先読みなしで機能します。
(?s)<item>.*?201[0-3]</pubDate>.*?</item>
元の質問:
Sublime Text 2 に XML ファイルがあります (以下の例)。2010 年から 2013 年までの<item
> 要素を含むすべての > 要素を検索したいと考えています。<pubDate
上記の正規表現は正しく機能しますが、すべてを見つけると (ファイルは約 1MB で、約 120 個の一致があります)、ST2 はスタック スペースを使い果たします。
その上にどんな恐ろしい非効率性が潜んでいますか?
XML の例:
<?xml version="1.0" encoding="utf-8"?>
<channel>
<item>
<title>This will match</title>
<link>http://gcanyon.posterous.com/</link>
<pubDate>Sat Mar 10 10:22:00 -0800 2012</pubDate>
<dc:creator><![CDATA[Geoff Canyon]]></dc:creator>
</item>
<item>
<title>This won't</title>
<link>http://gcanyon.posterous.com/</link>
<pubDate>Tue Jun 30 05:01:32 -0700 2009</pubDate>
<dc:creator><![CDATA[Geoff Canyon]]></dc:creator>
</item>
</channel>
</rss>