我正在使用Regex从HTML页面中获取一些价格。我有英镑和美元的工作字符串,但是一旦我用欧元更改它并将货币符号放在正则表达式字符串的末尾它似乎不起作用。
这是我的代码:preg_match('/([0-9]+[\.]*[0-9]*)\€/', $totalprice, $value);
然而$ value返回一个空数组。
谢谢!
答案 0 :(得分:4)
这似乎是编码问题。如果可以接受,请尝试仅使用正则表达式的货币unicode符号。
$totalprice = "595,95€";
preg_match('/((?:[0-9]*[.,])?[0-9]+)\p{Sc}/u', $totalprice, $value);
print_r($value);
答案 1 :(得分:1)
将u
修饰符添加到正则表达式字符串的末尾,以告诉它接受unicode字符。
preg_match('/([0-9]+[\.]*[0-9]*)\€/u', $totalprice, $value);
^
add this
答案 2 :(得分:1)
'#(\d+[\.\,]\d*?)\s?[€]#su'
我将/
替换为#
以提高可读性。
正则表达式的部分解释:
\d
匹配数字(等于[0-9],只是更短)
[\.\,]
匹配.
或,
作为小数点分隔符
*?
使* lazy,使引擎首先尝试跳过上一项,然后尝试使用前一项的不断增加的匹配进行排列 [1]
\s?
匹配空格字符(?使其可选)
修饰符表示:
s
匹配所有字符,包括换行符i
匹配无壳(不区分大小写)u
将模式字符串视为UTF-8 (对于€符号)