正则表达式匹配 rss <item> 内容,其中单词不在 <link>?



正在"正则化"出rss <item>(...)</item>的内容,但不希望匹配项在<link>...</link>元素中包含'europe'。

例如:

还行:

<item>
    <title>The title</title>
    <link>//website-india.com/the-title</link>
    <description>The description</description>
</item>

不行:

<item>
    <title>The title</title>
    <link>//website-europe.com/the-title</link>
    <description>The description</description>
</item>

尝试了几种不同的方法。现在我的正则表达式是

<item>(.*<link>.*(?!europe).*</link>.*)</item> 

女巫当然不行。但也试图将.*替换为(?!item),但没有成功。

有人知道在这种情况下该怎么做吗?

编辑:

只是认为这会起作用,但没有。它只是忽略整个 not 语句并输出所有项目:

<item>(((?!item)*).*?<link>[^<]*(?!europe)[^<]*</link>((?!item)*).*?)</item>

编辑 2:

这似乎有效。在我认为它是正确答案之前,会尝试更多:

<item>(((?!item).)*<link>((?!europe).)*</link>((?!item).)*)</item>

尝试使用以下代码:

preg_match_all('~<item>.*<link>((?:(?!europ).)+)</link>.*</item>~s', $rss, $out);