我在PHP。我想在一个以货币符号开头的句子中找到数字,然后返回数字。搜索“我在鞋上花了100欧元”并返回“100”。
我有这个工作的$和£:
'/[$£]([0-9.]{1,})/'
但添加欧元符号不起作用。 (句子来自解析的电子邮件,所以我不需要找到€);
preg_match_all('/[€]([0-9.]{1,})/', $sentence, $match);
我在SO上发现了以下内容: regex for currency (euro) 但它不编码欧元符号。
为了对欧元符号进行编码,我尝试过:
/[\x{20ac}]([0-9.]{1,})/u
"[^-a-zA-Z0-9.:,!+£$ \\ ". chr(164) ."]"
但无法弄清楚。有什么帮助吗?
答案 0 :(得分:1)
当我把它放进去时:
echo preg_match("#€[0-9]{1,}#", "€1" )?1:0;
我得到1
,因此您可能不需要unicode。但是如果你想使用UTF-8,我发现这是PHP文档下的评论。
function unichr($u) {
return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}
要获得€,请致电unichr(8364)
。用它代替上面的欧元符号,你会很好。 (我觉得我应该注意:我测试了两者作为unicode版本:
preg_match("#".unichr(8364)."\s*([0-9]{1,})#u", unichr(8364). "1" )?1:0;
您可能想先str_replace('€', unichr(8364), $str);
...
PS。您可能还想允许空格和小数:#€\s*([0-9]{1,}(\.?[0-9]{2}))#
答案 1 :(得分:-1)
用其他东西替换欧元符号怎么样? E.g:
$str = 'I spent €100 on shoes.';
$tempStr = str_replace('€', '$', $str);
//$tempStr now contains: I spent $100 on shoes.
preg_match_all('/[€]([0-9.]{1,})/', $tempStr, $match);