说我有这个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 :(得分:3)
您没有 来使用正则表达式。你可以随时搜索DOM以获得你想要的元素,但是,在这种特殊情况下(你没有解析HTML,你只是搜索某个字符串),你唯一的问题是你的正则表达式很贪心。添加?
会将其修改为不贪婪(一旦找到匹配就停止,而不是获得最长的匹配):
/Regular price.+?(\d[^\s]+)\sUSD/is
答案 1 :(得分:1)
使用。+?而不是。+。使用问号启动懒惰操作符。
答案 2 :(得分: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"