2

回答済み:

この正規表現は機能します:

<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>
4

2 に答える 2