无法为此编写正则表达式

时间:2011-08-12 13:46:16

标签: php regex cdata

  

可能重复:
  What RSS parser should I use in PHP?

以下是代码:

<item>
<title><![CDATA[OLK: The statement of shareholders for shares sale and for shares purchase]]></title>
<link>http://www.nasdaqomxbaltic.com/market/?pg=news&amp;news_id=250910</link>
<description><![CDATA[<pre></pre>]]></description>
<pubDate>2011-08-12 16:25:00</pubDate>
<guid>250910</guid>
</item>
<item>
<title><![CDATA[ZMP: Pranešimas apie sandorius susijusį su emitento vertybiniais popieriais]]></title>
<link>http://www.nasdaqomxbaltic.com/market/?pg=news&amp;news_id=250907</link>
<description><![CDATA[<pre></pre>]]></description>
<pubDate>2011-08-12 16:12:00</pubDate>
<guid>250907</guid>
</item>

我需要获得介于<title><![CDATA[:之间的值OLK,ZMP。在php正则表达式中执行此操作的最快和最有效的方法是什么?为什么CDATA在这里? 注意:我也得到news_id =。

4 个答案:

答案 0 :(得分:1)

您应该使用XML解析器(例如SimpleXML)来访问标记内容,然后在标记内容上使用正则表达式。

这是最有效的解决方案,因为:

  • XML解析器是解析XML文档的最有效方法,
  • 如果您确实需要使用正则表达式,则应将其用于CDATA中包含的数据,

关于CDATA的部分问题,您可以看到有关here的更多信息。

答案 1 :(得分:0)

这是一个很好的指南,用PHP解析xml。 http://www.kirupa.com/web/xml_php_parse_beginner.htm这是我在开始使用php时弄清楚xml解析器是如何工作的。

答案 2 :(得分:0)

考虑使用XML解析器,CDATA allows you to use special characters inside the value.如果您坚持使用正则表达式,请尝试以下操作:

/<title><!\[CDATA\[OLK:\s*(.*?)\]\]/

答案 3 :(得分:0)

如果你真的想要去正则表达式那么我会推荐前瞻和后面的零宽度断言。它们允许您声明和表达作为匹配的开始和结束,但它不会包含在结果中。