PHP与Site PHP的正则表达式问题

时间:2014-05-26 21:53:07

标签: php regex html-parsing

我有一个看起来像这样的PHP:

(?i)<(.*?)((?P<QUALIFY>title|))(.*?)>(.*?)(?P<MATCH>(South Beach))(.*?)<\/.*?>

这是我希望的,因为

  • <title>Bla South Beach</title>

返回

  • QUALIFY:TItle
  • 比赛:南海滩

  • Bla bla bla South Beach

什么都不返回。

这是在regex101上进行测试时。

但是,如果将其包含在实际网站的网站代码中,则

  • Bla bla bla South Beach

返回

  • QUALIFY:TItle
  • 比赛:南海滩

是的我知道,不要用Regex解析HTML。除此之外的任何想法?我的其他测试的正则表达式工作正常,也许我在这里遗漏了一些东西?


更新。进一步检查后发现我们在网站解析之前删除了/n/t。因此,所有<div>和其他<tags>都会聚集在一起。有没有办法改变正则表达式&gt;基本上我希望找到<title>ba bla South Beach</title>或div标签,例如<somethinbg "placetitle"=yada yada>bla bla South Beach</>


更新2以澄清第一条评论:

http://regex101.com/r/iX4nS4是正确的匹配,换句话说就是我要找的东西。

我确实将数组的标题部分更新为

  • <([^>]*)(title)([^>]*)>

但这对任何一方都没有帮助。

我基本上试图匹配

  • <title> OR
  • <something somethingTitle><

紧接着是包含

的字符串
  • South Beach

在下一个</

之前

示例:

  • <title>Beautiful South Beach!</title>
  • <meta = "locationTitle"><Beautiful South Beach and sunny Florida!</>

更新3: 进一步的研究结果证明它是正则表达式中的最后一个.*?

  • <\/.*?>

我之所以这样做,是因为我不确定开头标记可能包含什么内容,我通缉了结束&lt;&gt;但它将其解释为</ anything at all until the last >

1 个答案:

答案 0 :(得分:0)

你的表达过于复杂,试试这个:

<(title)>(.*?South Beach.*?)<\/\1>

http://regex101.com/r/sF1gN3


替代版本:

<(\S*).*?(title).*?>(.*?South Beach.*?)<\/(\1|\2)>

http://regex101.com/r/gU7bQ6