Задать вопрос

Нужна помощь в выдергивании параметра через регулярные выражения

Добрый день, Хабр.

Делаю регулярку на PHP. Не получается решить один момент.

Есть файл:
#Fri, 14 Sep 2012 12:29:26 +0400 #Wed Aug 08 17:40:54 MSD 2012 version=116
, с отображением табуляций и прочего, он выглядит вот так: clip2net.com/s/2iEDP

Мне нужно выдернуть значение version из него. Я делаю это вот так:
$version_file = 'version.file'; $version_data = file_get_contents($version_file, FILE_USE_INCLUDE_PATH); preg_match('/.*version=([0-9]+)\n*/Usmi', $version_data, $matches); $version = intval($matches[1]);

Проблема состоит в том, что $version возвращается = 1. Хотя в файле она 116.

print_r($matches) выводит:
Array ( [0] => #Fri, 14 Sep 2012 12:29:26 +0400 #Wed Aug 08 17:40:54 MSD 2012 version=1 [1] => 1 )

Что-то я делаю не так…
  • Вопрос задан
  • 2945 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Urvin
@Urvin
#^.*?version=(\d+)$#si
Как-то так
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
akral
@akral
Я вот не понимаю, зачем в начале и конце и автор и ответчики добаляют полный поиск.
Достаточно искать ту часть, что нужно:

/version=(\d+)/
Ответ написан
NeX
@NeX
preg_match('/.*version=([0-9]+?)\n*/Usmi', $version_data, $matches);
ru.wikipedia.org/wiki/%D0%E5%E3%F3%EB%FF%F0%ED%FB%E5_%E2%FB%F0%E0%E6%E5%ED%E8%FF
смотрите «Жадная и ленивая квантификация»
Ответ написан
gaelpa
@gaelpa
«Отбалды» парсинг конфигов в «стандартном» для никсов формате, без отсекания возможных кавычек.
$lines=explode("\n",file_get_contents('file.conf')); $params=array(); foreach ($lines as $line) { $line=trim($line); if (strpos($line,'#')===0) continue; $pair=explode('=',$line,2); $params[trim($pair[0])]=trim($pair[1]); }
Ответ написан
Комментировать
svscorp
@svscorp Автор вопроса
Спасибо, всем за комментарии и наставления. Буду учить матчасть.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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