Какой шаблон я должен использовать с preg_match_all (), чтобы извлечь сумму в этой строке? - PullRequest
0 голосов
/ 05 октября 2011

Хотелось бы извлечь сумму в следующей строке:

£5000 per Night - 1 bedroom - Serviced Apartment

Любая идея о том, как сделать это с помощью preg match all?

Я использую этот шаблон:

preg_match_all("|£(\d)|U",$string,$matches);

но он получает только 5 вместо 5000

что, если это 15 000 фунтов стерлингов, можно извлечь его через запятую?

спасибо за помощь,

Стефан

Ответы [ 3 ]

5 голосов
/ 05 октября 2011

Используйте \d+ вместо \d. В противном случае он будет соответствовать только одной цифре. + означает «один или несколько».

preg_match_all("|£(\d+)|U",$string,$matches);

(Подробнее о том, как повторение работает в регулярных выражениях, см. эту страницу .)


Выражение, которое также допускает запятые и гарантирует, что они не находятся в странных местах (например, ,500):

preg_match_all("|£(\d+(?:,\d+)*)|U",$string,$matches);
3 голосов
/ 05 октября 2011

Используйте + для сопоставления 1 или более экземпляров \d

preg_match_all("|£(\d+)|U",$string,$matches);
1 голос
/ 05 октября 2011

Вы пропустили рекурсию preg_match_all('|£(\d+)|U', $string, $matches) (обратите внимание на '+' после \d)

Обновление для отражения запятой в цене

Если выПри сопоставлении цены с запятыми или точками RegEx будет выглядеть как |£([\d,\.]+)| - в качестве основного примера.Квадратные скобки [ ... ] позволяют вам сопоставлять набор или символы, а не только один тип символа - поэтому в данном случае это любое число, запятая или точка.[0-9,\.]+ также будет работать (вам нужно избегать точки, так как это специальное совпадение "любой символ" в регулярных выражениях).

...