代码之家  ›  专栏  ›  技术社区  ›  Simon

帮助正则表达式刮取网站

  •  1
  • Simon  · 技术社区  · 14 年前

    我需要为以下内容编写一个正则表达式(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 回复  |  直到 14 年前
        1
  •  1
  •   codaddict    14 年前

    使用regex解析HTML不是一个好主意,而是使用dom-bases解析。

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

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

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

    阿尔索 + , ( ) 将按字面意思在char类中处理。所以没必要逃避它们:

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