我有一个看起来像这样的PHP:
(?i)<(.*?)((?P<QUALIFY>title|))(.*?)>(.*?)(?P<MATCH>(South Beach))(.*?)<\/.*?>
这是我希望的,因为
<title>Bla South Beach</title>
返回
和
Bla bla bla South Beach
什么都不返回。
这是在regex101上进行测试时。
但是,如果将其包含在实际网站的网站代码中,则
返回
是的我知道,不要用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 >
答案 0 :(得分:0)
你的表达过于复杂,试试这个:
<(title)>(.*?South Beach.*?)<\/\1>
替代版本:
<(\S*).*?(title).*?>(.*?South Beach.*?)<\/(\1|\2)>