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


Regex issue with PHP vs Site PHP

我有一个php,看起来像这样:

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

  • <title>Bla South Beach</title>

返回
  • 资格:标题
  • MATCH: South Beach

  • Bla bla bla South Beach

返回什么。

这是在regex101上测试时的情况。

但是,当它包含在一个在线网站的网站代码中,那么

  • 咩咩咩南海滩

返回
  • 资格:标题
  • MATCH: South Beach

是的,我知道,不要用Regex解析HTML。除此之外还有什么想法吗?我的其他测试的正则表达式工作得很好,也许我在这里错过了什么?


更新。进一步检查发现,我们在现场解析前将/n/t去掉了。所以所有的<div>和其他<tags>结合在一起。是否有办法改变正则表达式>基本上我正在寻找<title>ba bla South Beach</title>或div标签,如<somethinbg "placetitle"=yada yada>bla bla South Beach</>


更新2以澄清第一个注释:

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

我将数组的title部分更新为

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

但这也没有用。

我基本上是在匹配

  • <title>
  • <something somethingTitle><

后面紧接一个包含

的字符串
  • South Beach

下一个</

例子:

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

更新3:进一步研究发现,它是正则表达式

中最后一个.*?
  • <'/.*?>

我这样做是因为我不确定开始标签可能包括什么,所以我通配符结束<>,但它将其解释为</ anything at all until the last >

你的表达式太复杂了,试试这个:

<(title)>(.*?South Beach.*?)<'/'1>
http://regex101.com/r/sF1gN3


替代版本:

<('S*).*?(title).*?>(.*?South Beach.*?)<'/('1|'2)>
http://regex101.com/r/gU7bQ6