[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Пропуск части кода.
evdonik
Все привет)Народ напомните плиз по регуляркам.
Вот есть у меня такая регулярочка, нужно вытащить якорь.
'%(?<=<p class="free"> <a href="|" title="|">)[^><]+?(?=</a></p> </div>)%';

В итоге если класс не указывать ,обрезает все нужные и ненужные,
вот в упор не помню можно ли сделать чтоб он пропускал любой текст в href и title а вырезал именно якорь.



Спустя 32 минуты, 31 секунда (5.05.2012 - 09:19) Adamant написал(а):
Я не понял ничего. Вы регуляркой своей извлекаете текст якоря. И все равно что содержится в теге P есть ли там атрибуты или нет. Текст якоря в любом случае получается.

Приведите ваш текст в котором вы ищете, и что у вас не получается конкретно. А ваш код работает в любом случае

Спустя 11 минут, 11 секунд (5.05.2012 - 09:30) evdonik написал(а):
Вообщем пишу парсер новостей с сайта, беда в том что регулярки плоховато знаю, для начала вырезаю ссылки
Которые относятся к классу free - это новости в свободном доступе, но есть и класс paid или simplea - это новости с платным доступом, с ними отдельный разговор, после того как вырезал ссылку нужен якорь, но якорь зараза вырезается и на классе paid и на simple, то есть получается допустим 51 ссылка и 102 якоря, вырезанных со всех якорей..вот я и хочу чтоб только промежутке класса free вырезал..просто пропускал бы что в href и в title ,но ориентировался на то что класс free.

$src['preg1'][] = '%(?<=<p  class="free">  <a href=")[^><]+?(?=")%';

Режем ссылки.
$src['preg2'][] = '%(?<=<p  class="free">  <a href="\d\D" title="\d\D">)[^><]+?(?=</a></p> </div>)%';

Режем якорь.
До нововведений была такая регулярка, которая все классы резала
$src['preg3'][] = '%(?<=">)[^><]+?(?=</a></p> </div>)%';


вот ссылка на источник новостей
http://63media.ru/press/26.04.2012/all/


Спустя 2 часа, 16 секунд (5.05.2012 - 11:30) Adamant написал(а):

$pattern = '%<p\s+class="free">\s*<a href="(.+)" title=".+">(.+)<\/a><\/p>%iU';
preg_match_all($pattern, file_get_contents('http://63media.ru/press/26.04.2012/all/'), $matches);

echo "<pre>";
// Тут у нас все ссылки
print_r($matches[1]);
// Тут у нас текст якорей
print_r($matches[2]);
echo "</pre>";

Спустя 34 минуты, 38 секунд (5.05.2012 - 12:05) evdonik написал(а):
Цитата (Adamant @ 5.05.2012 - 09:30)

$pattern = '%<p\s+class="free">\s*<a href="(.+)" title=".+">(.+)<\/a><\/p>%iU';
preg_match_all($pattern, file_get_contents('http://63media.ru/press/26.04.2012/all/'), $matches);

echo "<pre>";
// Тут у нас все ссылки
print_r($matches[1]);
// Тут у нас текст якорей
print_r($matches[2]);
echo "</pre>";

От спасибо большое)))

все работает))

Спустя 16 минут, 42 секунды (5.05.2012 - 12:21) evdonik написал(а):
Вопрос попутный возник.
а просто пропустить не занося в массив ссылки можно каким нибудь образом?

Чтоб был только один массив с якорями.


Спустя 42 минуты, 33 секунды (5.05.2012 - 13:04) Adamant написал(а):

$pattern = '%<p\s+class="free">\s*<a href=".+" title=".+">(.+)<\/a><\/p>%iU';
preg_match_all($pattern, file_get_contents('http://63media.ru/press/26.04.2012/all/'), $matches);

echo "<pre>";;
// Один массив с текстом якорей
print_r($matches[1]);
echo "</pre>";

Спустя 4 минуты, 9 секунд (5.05.2012 - 13:08) evdonik написал(а):
Да вот в том то и беда что не получается))

Вообщем вот код
$src['name'][] = "63media.ru";
$src['preg1'][] = '%(?<=<p class="free"> <a href=")[^><]+?(?=")%';
$src['preg2'][] = '%<p\s+class="free">\s*<a href=".+" title=".+">(.+)<\/a><\/p>%iU';
$src['preg3'][] = '%<p\s+class="free">\s*<a href=".+" title=".+">(.+)<\/a><\/p>%iU';
$src['preg4'][] = '%(?<=<p class="free"> <a href="/press/)[^><]+?(?=/)%';
$src['preg5'][] = '%(?<=</h2><p>)[^><]+?(?=<\/p>)%';
$src['preg6'][] = '%(?<=<h2>)[^><]+?(?=</h2>)%';
$src['preg7'][] = '%(?<=class="free"><a href="/press/)[^><]+?(?=/)%';
$src['preg8'][] = "...";
$src['url'][]=$urlik;
$src['prefix'][] = "http://63media.ru";
$src['date_delimiter'][] = ".";
$src['date_format'][] = "DD.MM.YY";



$codepage = "cp-1251";




Вот обработчки, так как парсер более мнее пытаюсь сделать универсальным чтоб парсить разные сайт новостные, только исправив преги.

function get_snippets ($i)
{
global $src, $mark_last_days;// шобы доступ к массиву с конфигом получить
//кач-кач источник

$fff = geturl($src['url'][$i]);

echo "Получили " . strlen($fff) . " байт<br>";
preg_match_all($src['preg1'][$i], $fff, $reslist);
$links = $reslist[0];
// print_r($links);



preg_match_all($src['preg2'][$i], $fff, $reslist); //Получение якорей Массив [0]
$titles = $reslist[0];
$titles = convert_codepage ($codepage,$titles);
//print_r($titles);



preg_match_all($src['preg3'][$i], $fff, $reslist);
$snippet = $reslist[0];
$snippet=convert_codepage ($codepage,$snippet);

//print_r($snippet);

preg_match_all($src['preg4'][$i], $fff, $reslist);
$data = $reslist[0];
//print_r($data);





for($l=0; $l<count($data); $l++)
{
$sig = md5($src['prefix'][$i].$links[$l]);
if(file_exists("sig/".$sig))
{
// duplicate




echo "<tr bgcolor='PaleGreen'><td></td><td>".$src['name'][$i]."</td> <td>".$data[$l]."</td>
<td><a href='"
.$src['prefix'][$i].$links[$l]."' class='iframe'>Предпросмотр</a></td><td>".$titles[$l]."</td><td>".$snippet[$l]."</td></tr>";
}else{
// new article
$date = convert_date($data[$i], $src['date_delimiter'][$i], $src['date_format'][$i]);
if(strtotime($date)>(time()-($mark_last_days*24*60*60)))
{
$color = "lime";
}else{
$color = "Lavender";
}
echo '<tr bgcolor="Lavender" onclick="toggle(this,event)">';

echo '<td bgcolor="Lavender"><div><input type="checkbox" class="check" style="margin: 15px;" name="source'.$i.'-'.$l.'" value="'.base64_encode($src['prefix'][$i].$links[$l]).'"></td></div>';
echo "<td>".$src['name'][$i]."</td> <td>".$data[$l]."</td><td><a href='".$src['prefix'][$i].$links[$l]."' >Предпросмотр</a></td><td bgcolor='".$color."'>".$titles[$l]."</td><td>".$snippet[$l]."</td></tr>";
}
}

}
[php]
Быстрый ответ:

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