1

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

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

使用preg_match_all查找 html 实体有问题吗?

这是我正在尝试的:

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

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

4

1 回答 1

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

修复这两个问题将使代码在没有任何解析错误的情况下运行。它还应该回答您关于匹配实体的字面问题。

但是,我有点怀疑 Regex 是否能实现您想要做的事情。价格并不总是列出[CurrencySymbol][Amount]。例如,欧元通常写成 100 欧元或 100 欧元。因此,您还必须检查符号之前的数字和之后的空格。

于 2012-10-02T08:18:04.333 回答