RegEx – Как извлечь цену?

Как извлечь сумму в долларах из следующей строки

«какой-то текст пойдет здесь и все больше и больше, и тогда будет некоторая цена $ 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 .