限制正则​​表达式匹配

时间:2012-03-27 22:43:40

标签: html regex

说我有这个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的人设计的。

3 个答案:

答案 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"