【问题标题】:PHP Regular Expression HelpPHP 正则表达式帮助
【发布时间】:2011-04-04 18:46:45
【问题描述】:

客户有大约 7,000 种产品,描述中带有“您的价格:$...”,价格已输入(没有现有的通配符)。

这里是一个描述的例子:

<table cellpadding="5" border="0" width="100%"><tbody><tr><td><strong>Part #: </strong></td><td>FIV000-2100</td></tr><tr><td><strong>Retail Price: </strong></td><td>$26.39</td></tr><tr><td class="price"><strong>Your Price: </strong></td><td class="price">$23.75</td></tr><tr><td align="center" colspan="2"/></tr></tbody></table>

是否有正则表达式可用于仅删除“您的价格”行?我们还想删除什么零售价行?

任何帮助将不胜感激!

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:

    你可以这样做(假设$str是html字符串):

    $pattern = "/<tr><td class=\"price\"><strong>Your Price: <\/strong><\/td><td class=\"price\">\\$[0-9.]+<\/td><\/tr>/";
    $str = preg_replace($pattern, "", $str);
    

    空字符串将用空替换它,从而将其删除。

    编辑:

    转义了一些东西以使其工作。我还敦促您使用 HTML 解析器。让我们称之为快速而肮脏的方法。

    【讨论】:

    • +1 如果所有记录的格式都相同,这将非常有效,但您确实需要转义模式中的$ 和所有/ 字符。 (或者更好的是,选择不同的正则表达式分隔符)。您可能应该在 char 类中添加一个逗号(如果是 $1,234.56
    • 您的第一个 &lt;/td&gt; 有一个未转义的正斜杠。
    • @Justin E. Morgan 谢谢!固定。
    【解决方案2】:

    I strongly recommend you use an HTML parser for this。话虽如此,以下内容很可能会满足您的要求:

    /Your Price:.*?\$(\d+(?:,\d+)?(?:\.\d+)?)/
    

    我不知道 MySQL 正则表达式的语法,所以您可能需要仔细检查。

    【讨论】:

      【解决方案3】:

      你真的不想用正则表达式解析或修改 HTML... 只需使用为它制作的东西,例如 phpQuery:http://code.google.com/p/phpquery/

      【讨论】:

        猜你喜欢
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-10
        相关资源
        最近更新 更多