匹配HTML文本的产品价格

时间:2012-10-02 07:47:59

标签: php regex preg-match-all

我正在尝试使用字符串上的简单正则表达式来获取定价信息,但我的preg_match_all根本找不到它应该是什么。

我正在寻找例如$**.**£**.**或有时货币符号可能被编码为HTML实体,例如对于GBP ££

使用preg_match_all查找html实体是否存在问题?

以下是我正在尝试的内容:

$price = preg_match_all(
    '#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#', 
    $string, 
    $matches
);

但我得到:未知的修饰符'1'

1 个答案:

答案 0 :(得分:2)

以下是一些明显的错误:

1) preg_match_all()预计至少有3个参数,因此必须

preg_match_all(
    '#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#', 
    $string, 
    $matches
);

$matches变量将包含匹配的字符串。您的$price将包含模式匹配的次数。有关详细信息,请参阅http://php.net/preg_match_all

2)您有一个未转义的分隔符:

'#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#'
 ^                       ^                    ^
 Start                   Unescaped            End

修复这两个问题会产生code run without any parsing errors。它还应该回答关于匹配实体的文字问题。

然而,我有点怀疑正则表达式实现了你想要做的事情。价格并不总是列在[CurrencySymbol][Amount]。例如,欧元通常写成100欧元或100欧元。所以你必须在符号和空格之前检查数字。