正在"正则化"出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);