我正在尝试匹配以下内容:
此:
HIGH SCHOOL WRESTLING NOTEBOOK: A surge at Delaware Valley, team rankings shakeup and more.
有了这个:
<pre>
<div class="sum">
<div class="photo_gutter">
<div class="photo">
<a href="http://media.lehighvalleylive.com/brad-wilson/photo/jaryd-flank-b30e919c41bc86b2.jpg">
<img src="http://media.lehighvalleylive.com/brad-wilson/photo/jaryd-flank-b30e919c41bc86b2.jpg" alt="" title="" width="200" border="0"/>
</a>
</div>
</div>
</div>
HIGH SCHOOL WRESTLING NOTEBOOK: A surge at Delaware Valley, team rankings shakeup and more.
</pre>
到目前为止我所拥有的是/<.*>\s/i
,但我需要与此相反。有人能帮助我吗?
答案 0 :(得分:2)
不要使用正则表达式来解析HTML,而是使用PHP Domdocument。
答案 1 :(得分:0)
不建议使用正则表达式来解析HTML,但因为这是一项简单的任务(可能是为了学习正则表达式):
你有这个:/<.*>\s/i
1- i
修饰符在此处不执行任何操作,因为您没有使用任何在regex表达式中区分大小写的字符。即:/apple/i
有道理,因为你想找到Apple
。 /\w+/i
不执行任何操作,因为\w
包含小写和大写字符。
2-如果您正在解析HTML,最好不要假设或使用任何\s
,除非您在标记内。
3-如果要将正则表达式的一部分捕获到变量中,则必须使用(
和)
。即:/(\w+) Apple/
解析Red Apple
会在Red
或$1
函数的匹配数组中为您提供preg_match()
。
现在我该怎么做:
首先,我会从输入字符串中删除任何\r\n
或\n
。只有一行文本,正则表达式更好用。您可以使用str_replace()
如果您想获得不在<>
内的任何内容:
/>(.*?)</
如果您想获取某个标签内的文字,例如<div>this one</div>
:
/<div>(.*?)<\/div>/
?
字符使.*
匹配非贪婪,因此它将获得与该模式匹配的最少字符数。
希望它有所帮助。