1

我正在使用正则表达式从 HTML 页面中获取一些价格。我有 £ 和 $ 的工作字符串,但是一旦我将其更改为欧元并将货币符号放在正则表达式字符串的末尾,它似乎不起作用。

这是我的代码:preg_match('/([0-9]+[\.]*[0-9]*)\€/', $totalprice, $value);

然而 $value 返回一个空数组。

谢谢!

4

3 回答 3

4

这似乎是编码的问题。如果可以接受,请尝试仅对正则表达式使用货币 unicode 符号。

$totalprice = "595,95€";
preg_match('/((?:[0-9]*[.,])?[0-9]+)\p{Sc}/u', $totalprice, $value);
print_r($value);

phpFiddle

于 2013-08-08T14:52:31.473 回答
2

u修饰符添加到正则表达式字符串的末尾以告诉它接受 unicode 字符。

preg_match('/([0-9]+[\.]*[0-9]*)\€/u', $totalprice, $value);
                                   ^
                                add this
于 2013-08-08T15:01:15.847 回答
1

我会使用这个正则表达式:

'#(\d+[\.\,]\d*?)\s?[€]#su'

为了可读性,我替换/为。#

 
正则表达式的部分解释:

  • \d           匹配数字(等于 [0-9],只是更短)

  • [\.\,]   匹配.或匹配,小数点分隔符

  • *?           使 * 变得懒惰,因此引擎首先尝试跳过前一项,然后再尝试与前一项的匹配不断增加的排列[1]

  • \s?         匹配空格字符(?使其可选)

 
修饰符的意思是:

  • s   匹配所有字符,包括换行符
  • i   匹配无大小写(不区分大小写)
  • u   将模式字符串视为 UTF-8 (用于 € 符号)
于 2013-08-08T15:23:40.713 回答