从HTML文本匹配产品价格(Matching Product Prices from an HTML

2019-08-01 02:22发布

我想对定价信息的字符串的简单的正则表达式,但我的preg_match_all根本就没有发现什么它应该。

我在寻找如实例$**.**£**.**有时,货币符号可能会被编码为HTML实体,如英镑££

有没有用的问题preg_match_all找到HTML实体?

这里就是我想:

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

但我得到:未知的修饰词“1”

Answer 1:

下面是一些明显的错误:

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

修复这两个问题将使代码运行没有任何解析错误 。 还应该回答有关匹配实体文字的问题。

不过,我有点怀疑正则表达式达到你正在尝试做的。 价格并不总是列[CurrencySymbol][Amount] 。 例如,欧元通常被写为€100或€100。 所以,你得后,以及检查符号之前的数字和空格。



文章来源: Matching Product Prices from an HTML text