2012-03-27 69 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"