我想对定价信息的字符串的简单的正则表达式,但我的preg_match_all
根本就没有发现什么它应该。
我在寻找如实例$**.**
或£**.**
有时,货币符号可能会被编码为HTML实体,如英镑£
或£
有没有用的问题preg_match_all
找到HTML实体?
这里就是我想:
$price = preg_match_all(
'#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#',
$string,
$matches
);
但我得到:未知的修饰词“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。 所以,你得后,以及检查符号之前的数字和空格。