Консультация № 178263
07.05.2010, 04:52
43.65 руб.
0 5 1
Утро доброе ув. эксперты..
вопрос экстремальный)скоро сдавать работу, а проблема некрасивая возникает...
Вопрос по теме регулярные выражения.
Проблема: у меня есть скриптек, который находит в html опр символы, и васе что между ними забирает в массив..

preg_match('/'.preg_quote($siteyear_start,'/').'.*'.preg_quote($siteyear_end,'/').'/s',$ress,$siteyear);
$this->siteyear = $siteyear[0];

Проблема в том что текст находит, и забирает найденое + то что "между" и в конце...а мне нужно забирать только то что в центре, а не поисковые символы....
Вопрос, как решить эту проблему? что бы он не забирал результат поиска, а только результат найденого то есть то что "*", и скажите пожалуйста может есть какой ни будь вариант улучшить поиск конца и начало? а то мало того что берет результат, так еще и плохо отесивает конец))))
См во вложении... там яснее тучи...

Приложение:
Итак вот пример так нагялдней:
начало поиска = "<a href="lll">';
конец поиска = '</a>

Что парсим: <td> <tr> <td> <a href="lll"> OLOLO AND TROLOLO</a> gg </a>

что нам может выдать: <a href="lll"> OLOLO AND TROLOLO</a> gg </a>
А надо: OLOLO AND TROLOLO

Обсуждение

Неизвестный
07.05.2010, 05:22
общий
http://ru.php.net/manual/en/regexp.reference.assertions.php

Код:
preg_match('/(?<='.preg_quote($siteyear_start,'/').').*(?='.preg_quote($siteyear_end,'/').')/sU',$ress,$siteyear);


добавил модификатор U (PCRE_UNGREEDY), теперь "выдаваться" будет текст лежащий м/д первым(!) появлением $siteyear_start и первым после него $siteyear_end...
Неизвестный
07.05.2010, 09:15
общий
Устинов С.Е.:
Попутно хочу попросить помощи...
Дело в том что если я попытаюсь включить кириллицу в поиск, то результтат нулевой, так же как и если я не вклбючаю криллицу, но она попадает в результат после парсинга...не подскажете что делать? пробовал setlocale(LC_ALL, "ru_RU.CP1251");
и mb_convert_case($ress, MB_CASE_LOWER, "utf-8"); итп)
Либо вообще некакой результат не берет, либо очень редко где)
данные порлучаю посредством курл)
Код:

unction cuwhileurl() {
$url = 'http://www.free-lance.ru/users/XRoman/info/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
$ress = curl_exec($ch);
curl_close($ch);
$this->ress = mb_convert_case($ress, MB_CASE_LOWER, "utf-8");
$this->parser();
}

function parser() {
$ress = $this->ress;
$firstname_start = mb_convert_case('<a href="http://www.free-lance.ru/users/*" class="frlnameH">', MB_CASE_LOWER, "utf-8");
$firstname_end = '</a>';
$nickname_start = '<a href="http://www.free-lance.ru/users/';
$nickname_end = '" class="frlnameH">';

Вот никнейм выводиться, а вот имя и фамилия нет) то жесамое и с остальным) даже без mb_convert:)
Неизвестный
07.05.2010, 11:44
общий
Герасимов Виталий Владиславович:
Сайт в кодировке cp1251, так что нужно сначала сконвертировать в utf-8, а потом уже переводить в нижний регистр.
Код:
$ress = curl_exec($ch); 
curl_close($ch);
-$this->ress = mb_convert_case($ress, MB_CASE_LOWER, "utf-8");
+$this->ress = mb_convert_case(iconv('cp1251','utf-8',$ress), MB_CASE_LOWER, "utf-8");
$this->parser();
}
Неизвестный
07.05.2010, 14:47
общий
это ответ
Здравствуйте, Герасимов Виталий Владиславович.
чтобы забрать результат поиска, заключите его в скобки, в выходном массиве [0] - результат полного совпадения с регулярным выражением, а дальше ([1],[2] итд) идет содержимое первых, вторых итд скобок.
Неизвестный
07.05.2010, 15:12
общий
Всем большое спасибо)) все заработало как надо + запомнил что да как)
Форма ответа