帮助正则表达式来抓取网站

时间:2010-09-10 09:11:40

标签: regex

我需要为以下内容编写一个正则表达式(NB。忽略回车符,为了便于阅读,我添加了它们):

<strong>Contact details</strong>
<p><label>Office:</label>&nbsp;+44 (0)12 3456 7890<br />
<label>Direct:</label>&nbsp;+44 (0)12 3456 7890<br />
<label>Mobile:</label>&nbsp;+44 (0)1234 567890<br />
<label>E-mail:</label>&nbsp;<a href="mailto:you@me.com">you@me.com</a><br />

我正在使用

/([\+\d\(\)\s]+)/

哪个匹配数字块,我可以使用和偏移0-2来识别它们。问题是它正在返回白色空间,这也搞砸了我的偏移。 怎么说“它必须在比赛中至少包含一位数字”? 我也试过

/\<label\>Office:\<\/label\>&nbsp;([\+\d\(\)\s]+)\<br \/\>/

但那会返回

+44 (0)12 3456 7890<br />
<label>Direct:</label>&nbsp;+44 (0)12 3456 7890<br />
<label>Mobile:</label>&nbsp;+44 (0)1234 567890<br />
<label>E-mail:</label>&nbsp;<a href="mailto:you@me.com">you@me.com</a>

1 个答案:

答案 0 :(得分:1)

使用正则表达式解析HTML不是一个好主意,而是使用DOM基础解析。

你的正则表达式不起作用,因为它贪婪,使其变得非贪婪

([\+\d\(\)\s]+)

([\+\d\(\)\s]+?)

同样+()将在char类中进行字面处理。所以不需要逃避它们:

([+\d()\s]+?)