Как извлечь сумму в долларах из следующей строки
«какой-то текст пойдет здесь и все больше и больше, и тогда будет некоторая цена $ 34,03, но это не значит, что строка закончится»
Я хочу извлечь $ 34.03 … также хочу извлечь, если нет центов
«какой-то текст пойдет здесь и все больше и больше, и тогда будет цена $ 34, но это не значит, что строка закончится»
Здесь я хочу извлечь $ 34
Я не regex-гуру, но смог перезапустить следующее с RegExr .
/(\$[0-9]+(\.[0-9]{2})?)/
Соответствует $35.03
и $35
. Чтобы принять такие форматы, как $35,000.52
вам нужно будет включить ,
/(\$[0-9,]+(\.[0-9]{2})?)/
Вероятно, это может быть улучшено, но из моих предварительных тестов это работает отлично.
'/\$\d+(?:\.\d+)?/' if(preg_match('/\$\d+(?:\.\d+)?/',$text,$matches)){ echo $matches[0]; //which would be $34 or $34.03 }
Поскольку вы не упоминаете конкретный механизм регулярных выражений, вам, возможно, придется немного подкорректировать это:
/(\$\d+(\.\d+)?)/
В настоящее время я работаю над небольшой функцией, использующей регулярное выражение, чтобы получить сумму цены внутри строки:
private static String getPrice(String input) { String output = ""; Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?"); Matcher matcher = pattern.matcher(input); if (matcher.find()) { output = matcher.group(0); } return output; }
это, кажется, работает с небольшой ценой (от 0,00 до 999,99) и различной валютой:
$ 12,34 -> 12,34
$ 12,34 -> 12,34
$ 12.00 -> 12.00
$ 12 -> 12
12 € -> 12
12,11 € -> 12,11
12.999 € -> 12.99
12,9 € -> 12,9
£ 999,99 € -> 999,99
…
Как насчет этого regexp: \$[0-9.,]+
Или \$([0-9.,]+)
Чтобы удалить $
?
Это просто, но он делает многое, что вы хотите, он даже ловит такие вещи: $1,450.8934
или $14.343
.
Конечно, недостатком было бы то, что он поймал бы $34.54.23
.
Или если вы хотите поймать только два десятичных знака: \$[0-9,]+\.[0-9]{2}
он поймает $5.23
часть $5.234565
.
Вы можете использовать его с preg_match
или preg_match_all
.