[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Применение регулярных выражений для кода HTML
oleg_46
После парсинга xml есть HTML стараница, нужно код страницы пропустить через регулярку для нахождения на ней и последующего вывода текста.

$res = file_get_contents ("search.php");
// открываю фаил с кодом в переменную.

$regs = preg_grep('/>.підприємства більше./', $res);
//пытаюсь вернуть массив того, что нашел

echo $regs[0];
//пытаюсь это вывести.

preg_grep возвращает массив, но возникает Warning: preg_grep() expects parameter 2 to be array, string given in Z:\home\local\alexandr\search.php on line 73.
Вобщем чего делать то для получения кода, его проверки и вывода.



Спустя 7 минут, 58 секунд (28.10.2011 - 17:01) Игорь_Vasinsky написал(а):
Цитата
reg_grep() expects parameter 2 to be array, string

2й аргумент должен быть массивом - а ты дал - строку, а есть ещё 3й - тот массив в который совпадения заносятся.
preg_gre - устаревшая

preg_match_all() - юзай.

Что ищешь то?

Спустя 9 минут, 25 секунд (28.10.2011 - 17:10) oleg_46 написал(а):
Задача - по запросу методом ГЕТ, найти текст на странице и вывести его. В середине рег. выражения я указал явный текст, вместо него будет переменная полученная ГЕТом. В регулярке я хочу, что бы к выборке присоединялся текст с двух сторон до значка тега. Насчет preg_match_all, ща буду пробовать. Чето думал, что она тоже возвращает тру и фалс.

Спустя 13 минут, 19 секунд (28.10.2011 - 17:24) Winston написал(а):
$res = file_get_contents ("search.php");
preg_match_all('/>.підприємства більше./', $res, $matches);
print_r($matches);

preg_grep используется для поиска по массиву. Если ты хочешь ее использовать то нужно код переписать
$res = file("search.php");
$matches = preg_grep('/>.підприємства більше./', $res);
print_r($matches);

Цитата (Игорь_Vasinsky @ 28.10.2011 - 17:01)
preg_gre - устаревшая

С какого перепугу ? :blink:

Цитата (Игорь_Vasinsky @ 28.10.2011 - 17:01)
есть ещё 3й - тот массив в который совпадения заносятся

Эта ф-я возвращает массив, а третий аргумент служит для указания инверсии (достать то, что не попало под шаблон)

Спустя 15 минут, 50 секунд (28.10.2011 - 17:40) oleg_46 написал(а):
Ну ладно, допустим пишу

$res = file("search.php");
preg_match_all('/>.$keywords.</', $res, $matches);
print_r($matches);

подскажите как правильно вписать переменную, а если пишешь вместо неё "підприємства більше", то выдает аррей ареев.

Спустя 3 минуты, 38 секунд (28.10.2011 - 17:43) Игорь_Vasinsky написал(а):
Winston
biggrin.gif biggrin.gif biggrin.gif я с ерег перепутал wink.gif

Спустя 49 секунд (28.10.2011 - 17:44) Winston написал(а):
Для preg_match_all нужно строку подавать, а не массив ! Почитай, что делает file()

$res = file_get_contents("search.php");
preg_match_all('/>'.$keywords.'</', $res, $matches);
print_r($matches);

Спустя 18 минут, 52 секунды (28.10.2011 - 18:03) oleg_46 написал(а):
Выдает пустой массив. Может чего то я не так сделал. Опишу ситуацию целиком.
Есть форма из которой отправляю ГЕТом запрос. Усть xml файлик. в начале страницы search.php я его парсю . Получаю search.php с урлом ГЕТ запроса и тегами с текстом. Структура тегов такая.

<NEWS_PIECE>

<LANGUAGE>
1</LANGUAGE><br>
<DATE>
2011-10-03 12:04:42</DATE><br>
<NAME>
Директор ТОВ не заплатив 229 працівникам</NAME><br>
<SOURCE>
http://www.zib.com.ua/ua/5414.html</SOURCE><br>
<SOURCE_NAME>
Газета Закон і Бізнес</SOURCE_NAME><br>
<ABSTRACT>
Прокуратурою Київського району м. Харкова закінчено досудове слідство у кримінальній справі, порушеній стосовно директора одного з товариств з обмеженою відповідальністю за фактом безпідставної невиплати заробітної плати 229 працівникам підприємства більше, ніж за місяць, за ч.1 ст.175 Кримінального кодексу України.</ABSTRACT><br>

</NEWS_PIECE>

Ну и т.д. такой же структуры.
Пытаюсь получить весь текст от <NEWS_PIECE> до </NEWS_PIECE>, если между ними есть искомый кусок.

Пишу как советовали


$res = file_get_contents("search.php");
preg_match_all('/>'.$keywords.'</', $res, $matches);
print_r($matches);


Но в ответ пустой массив, хотя вводимый текст есть по любому.

Спустя 4 минуты, 16 секунд (28.10.2011 - 18:07) Winston написал(а):
У меня все работает
Свернутый текст
$str = '<NEWS_PIECE>

<LANGUAGE>1</LANGUAGE><br>
<DATE>2011-10-03 12:04:42</DATE><br>
<NAME>Директор ТОВ не заплатив 229 працівникам</NAME><br>
<SOURCE>http://www.zib.com.ua/ua/5414.html</SOURCE><br>
<SOURCE_NAME>Газета Закон і Бізнес</SOURCE_NAME><br>
<ABSTRACT>Прокуратурою Київського району м. Харкова закінчено досудове слідство у кримінальній справі, порушеній стосовно директора одного з товариств з обмеженою відповідальністю за фактом безпідставної невиплати заробітної плати 229 працівникам підприємства більше, ніж за місяць, за ч.1 ст.175 Кримінального кодексу України.</ABSTRACT><br>

</NEWS_PIECE>'
;
$keywords = 'працівникам';
preg_match_all('#(?='.$keywords.')(.*)#isu', $str, $matches);
echo '<pre>'.print_r($matches,1).'</pre>';

Спустя 25 минут, 20 секунд (28.10.2011 - 18:32) oleg_46 написал(а):
Странно.
По идее должно работать.


$str = file_get_contents("search.php");//получает текст
preg_match_all('#(?='.$keywords.')(.*)#isu', $str, $matches);//выборка
echo '<pre>'.print_r($matches,1).'</pre>';//выводим


А выводиться
Array
(
[0] => Array
(
)

[1] => Array
(
)

)

Спустя 3 минуты, 14 секунд (28.10.2011 - 18:36) Winston написал(а):
Если у тебя кодировка не UTF-8 то убери модификатор u

Спустя 1 минута, 30 секунд (28.10.2011 - 18:37) oleg_46 написал(а):
utf-8

Спустя 2 минуты, 23 секунды (28.10.2011 - 18:40) oleg_46 написал(а):
Может file_get_contents не передает строку.

Спустя 5 минут, 14 секунд (28.10.2011 - 18:45) Winston написал(а):
Попробуй для начала выдрать все
$str = file_get_contents("search.php");//получает текст
preg_match_all('#(.*)#isu', $str, $matches);//выборка
echo '<pre>'.print_r($matches,1).'</pre>';//выводим

Спустя 9 минут, 59 секунд (28.10.2011 - 18:55) oleg_46 написал(а):
Array
(
[0] => Array
(
[0] => ";}


Это тот же арей. А дальше пхп текст кусками. Потому что читает сам себя. Может обработку производить на 3 странице.





else echo "<".$tag.">";

}

// Функция обработчик закрывающих тегов
function end_tag_handler($xml, $tag) {
echo "
";
}

// Функция обработчик текстового содержимого
function character_handler($xml, $data) {

echo $data;
}

xml_parse($xml, file_get_contents("last_news_xml.xml"));
?>


'.print_r($matches,1).'
';//выводим ?> [1] => ) [1] => Array ( [0] => ";} else echo "<".$tag.">"; } // Функция обработчик закрывающих тегов function end_tag_handler($xml, $tag) { echo "
"; } // Функция обработчик текстового содержимого function character_handler($xml, $data) { echo $data; } xml_parse($xml, file_get_contents("last_news_xml.xml")); ?> '.print_r($matches,1).'';//выводим ?> [1] => ) )

Спустя 12 минут, 39 секунд (28.10.2011 - 19:07) Winston написал(а):
Цитата (oleg_46 @ 28.10.2011 - 18:55)
Потому что читает сам себя

Это бред blink.gif
Сделай отдельный файл в котором будет хранится xml

Спустя 22 часа, 26 минут, 25 секунд (29.10.2011 - 17:34) oleg_46 написал(а):
Так у меня и есть отдельный файл last_news_xml.xml. Он парсится кодом, который лежит в search.php. В итоге получается search.php с пхп кодом и структурой тегов, которая получилась в результате парсинга.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.