【问题标题】:PCRE/PHP regex not matching last "item"PCRE/PHP 正则表达式与最后一个“项目”不匹配
【发布时间】:2012-09-18 09:09:38
【问题描述】:

这是我拼凑的一个正则表达式:

/(.*={76}\s)?\s*(.*?)\s\-\-\s(\d{2}\/\d{2}\-\d{2}\s\d{2}:\d{2})\s\s(.*?)\s(http:\/\/service.*?)\s(\-{76})/is

这是我要解析的文本:http://p.linode.com/7015

这是匹配文本的替换:

<item>\n\t<title>$2</title>\n\t<pubDate>$pubDate</pubDate>\n\t<description>$4</description>\n\t<link>$5</link>\n</item>\n\n

最后,这是我得到的输出:http://p.linode.com/7016

我几乎想出了一个将文本块解析为 RSS 2.0 XML 标记所需的正则表达式。我已经用RegExr 和 RegexBuddy 对其进行了测试,对于链接后没有换行符的最后一个“项目”(Line 269),它完美地工作除了。

简而言之,问题是文本中的“iProperty”文章不匹配。

任何正则表达式专家愿意帮助我解决问题吗?

【问题讨论】:

    标签: php regex pcre


    【解决方案1】:

    我试过了,我想我已经找到了解决方案(我可以用它生成正确的输出文件),只需像这样修改你的正则表达式:

    /(.*={76}\s)?\s*(.*?)\s\-\-\s(\d{2}\/\d{2}\-\d{2}\s\d{2}:\d{2})\s\s(.*?)\s(http:\/\/service.*?)(\s(\-{76})|$)/is
    

    我刚刚在末尾添加了|$,并为 OR 语句添加了一些 ()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多