Yastr
@Yastr

Регулярное выражение (выборка до слова)?

Здравствуйте. Пытаюсь получить город по ip, нашел вот такой скрипт
<?php 
  if( $curl = curl_init() ) { 
    // $ip = $_SERVER["REMOTE_ADDR"]; 
    $ip = '212.100.131.254'; 
    curl_setopt($curl, CURLOPT_URL, 'http://ip-whois.net/ip_geo.php?ip='.$ip); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); 
    $out = curl_exec($curl); 
    $matches = array(); 
    $city = preg_match_all("/Город: (.*)/i", $out, $matches); 
    print_r($matches[1][1]); 
    curl_close($curl); 
  } 
?>
И все вроде хорошо, но возвращает он мне следующее
Москва
Широта: 55.755787

Необходимо получить только название города. Как понимаю дело в регулярке, но так как с php знаком очень поверхностно не представляю как это исправить. Искал как выбрать все до определенного слова, к сожалению ничего толкового не нашел. Подскажите пожалуйста как убрать эту часть начинающуюся с "Широта..".
  • Вопрос задан
  • 3415 просмотров
Решения вопроса 1
@simpleadmin
preg_match_all("/^\s*Город:\s+(.+)<br>/Usmi", $out, $matches); 
$city = isset($matches[1][0])?$matches[1][0]:false;
var_dump($city);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Yastr
@Yastr Автор вопроса
@simpleadmin насколько я понимаю финальный результат таким должен быть?
<?php 
  if( $curl = curl_init() ) { 
    // $ip = $_SERVER["REMOTE_ADDR"]; 
    $ip = '212.100.131.254'; 
    curl_setopt($curl, CURLOPT_URL, 'http://ip-whois.net/ip_geo.php?ip='.$ip); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); 
    $out = curl_exec($curl); 
    $matches = array(); 
   
    preg_match_all("/^\s*Город:\s+(.+)<br>/Usmi", $out, $matches); 
    $city = isset($matches[1][0])?$matches[1][0]:false;
    var_dump($city);
   
    print_r($matches[1][1]); 
    curl_close($curl); 
  } 
?>

Выдает - bool(false)
Ответ написан
egor_nullptr
@egor_nullptr
$city = preg_match("/Город: ([^\s]+)/i", $out, $matches);
Ответ написан
miraage
@miraage
Старый прогер
Быть может так? Нет сейчас консоли под рукой.

preg_match_all("/Город: ([а-я])+/i", $out, $matches);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы