PHP регулярное выражение, чтобы найти незашифрованный символ евро
Я в PHP. Я хотел бы найти числа в предложении, которые начинаются с символа валюты и возвращают число. Для поиска "я потратил 100 евро на обувь" и вернем "100".
У меня это работает за $ и £:
'/[$£]([0-9.]{1,})/'
Но добавление символа евро не работает. (Предложения приходят из разобранных писем, поэтому мне не нужно искать €);
preg_match_all('/[€]([0-9.]{1,})/', $sentence, $match);
На SO я нашел следующее: регулярное выражение для валюты (евро), но оно не кодирует символ евро.
Чтобы закодировать символ евро, я попытался:
/[\x{20ac}]([0-9.]{1,})/u
"[^-a-zA-Z0-9.:,!+£$ \\ ". chr(164) ."]"
Но не могу понять это. Любая помощь?
2 ответа
Когда я вставлю это в:
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}))#
Как насчет замены символа евро чем-то другим? Например:
$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);