我正在尝试使用字符串上的简单正则表达式来获取定价信息,但我的preg_match_all
根本找不到它应该是什么。
我正在寻找例如$**.**
或£**.**
或有时货币符号可能被编码为HTML实体,例如对于GBP £
或£
使用preg_match_all
查找html实体是否存在问题?
以下是我正在尝试的内容:
$price = preg_match_all(
'#(?:\$|\£|\€|\£|\£)(\d+(?:\.\d+)?)#',
$string,
$matches
);
但我得到:未知的修饰符'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欧元。所以你必须在符号和空格之前检查数字。