2012-03-27 54 views
1

說我有這個HTML片段限制正則表達式匹配

  <td width="25%" style="text-align:right;" > 
       <span style="font-family: Arial; font-size: 12px;"> 
       <strong>Regular price:</strong></span> 
      </td>       
      <td width="25%" style="text-align:center;" > 
       <span style="font-family: Arial; font-size: 12px;> 
       <strong>11,100.00 USD</strong></span> 
      </td> 
      <td width="25%" style="text-align:right;" > 
       <span style="font-family: Arial; font-size: 12px;"> 
       <strong>Web price:</strong></span> 
      </td>       
      <td width="25%" style="text-align:center;" > 
       <span style="font-family: Arial; font-size: 12px;> 
       <strong>9,100.00 USD</strong></span> 
      </td> 

我該如何獲得使用正則表達式的第一量(11,100.00)? 我試過

/Regular price.+(\d[^\s]+)\sUSD/is 

但它不工作,它返回'00'。很明顯,我是一個正則表達式的新手,我希望不用拿起一本書。

我必須使用正則表達式來解析這個HTML,因爲那個特定的站點是由不知道類或ID的人設計的。

+0

有一個傳說中的答案可以在這裏找到:[1] [1]:http:// stackoverflo w.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2012-03-27 22:48:25

+0

你讀過我最後一句話嗎?這個特定的HTML不使用任何類或ID,所以我別無選擇,只能使用Regex。正則表達式可以解析字符串,當我將它放入字符串變量時,就是HTML。當然,我以前讀過這個愚蠢的答案,但是如果你知道更好的方法來解析沒有任何類或ID的HTML,請告訴我。 – DMIL 2012-03-27 22:51:23

+0

使用** jQuery **可以比使用Regex選項更容易和更快地獲得結果。 – inhan 2012-03-27 22:56:38

回答

1

使用+?而不是。+。用問號開始懶惰的操作符。

+0

謝謝,這工作。 – DMIL 2012-03-27 22:54:29

3

你不要使用正則表達式。你總是可以搜索DOM到你想要的元素,但是,在這種特殊情況下(你不解析HTML,你只是搜索某個字符串),唯一的問題是你的正則表達式是貪婪的。添加?將其修改爲不貪(只要它找到一個匹配停止,而不是領最長可能匹配)。

/Regular price.+?(\d[^\s]+)\sUSD/is 
+0

我不參與投票,但你的回答是正確的! http://www.rubular.com/r/vONnrbLbIL – mellamokb 2012-03-27 22:50:07

+0

@mellamokb大聲笑,你今天一定很喜歡這麼做。好的工作:)投票重置在一個多小時,如果你想保持我的答案在腦海中,直到那時,並仍將在網上;) – Paulpro 2012-03-27 22:53:52

+0

我將如何搜索DOM(與Xpath說)來獲取內容這個特殊元素?有問題的HTML不使用ID或類,除了計數(並希望計數保持不變,即使他們添加到網站的東西),我不知道如何。 – DMIL 2012-03-27 22:57:52

0

TXR解決方案:(http://www.nongnu.org/txr

腳本在data.txr

@(skip) 
      <td @(skip)> 
@(skip) 
       <strong>Regular price:</strong></span> 
      </td> 
      <td @(skip)> 
       <span @(skip)> 
       <strong>@price USD</strong></span> 
      </td> 

運行:

$ txr data.txr data.html 
price="11,100.00"