2009-02-25 6 views
0

Может кто-нибудь объяснить это мне, я не знаком с фильтрами preg_match_all, этот код отлично работает, за исключением того, что он не возвращает отрицательное значение, если одна из широт и долгот отрицательна.preg_match_all

if (preg_match_all("#<td>\s+-?(\d+\.\d+)\s+</td>#", $output, $coords)) { 
    list($lat, $long) = $coords[1]; 
    echo "Latitude: $lat\nLongitude: $long\n"; 
} 

выход: Latitude: 30.6963 Longitude: 71.6207 (долгота отсутствует знак «-»)

ответ

3

Значение переменной coords зависит от того, что соответствует по коду внутри скобок. Перемещение дополнительного знака минус (-?) в скобках следует сделать трюк:

if (preg_match_all("#<td>\s+(-?\d+\.\d+)\s+</td>#", $output, $coords)) { 

См official documentation подробной информации о PREG в PHP и php.net/preg_match_all для деталей preg_match_all.

+0

Вы можете сослаться на ссылку, в которой я могу понять все фильтры, используемые в preg_match_all, ineed, чтобы узнать об этом – hitek

+0

http://www.regular-expressions.info –

+0

@unknown (yahoo): Добавлен абзац о документации – phihag

1

Ваш знак не находится в круглых скобках. $ coords [1] содержит часть регулярного выражения, которое соответствует части между (и). «+» - перед скобкой, тем не менее, поэтому они не являются частью того, что согласовано и возвращено.