我有一个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