Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Выбрать ссылки


Автор: Mosaicolor 10.2.2014, 14:10
Понимаю, что задачка, наверное очень простая, но прошу не смеяться, а помочь.

Есть некий текст. В нем некоторое количество ссылок вида: <a title="bomba direccion" class="aprovechamiento_pieza_envehiculo" href="/detalle-pieza-1533414.html">bomba direccion</a>

Необходимо выбрать их все (но неизвестно, сколько их, от 0 до пары сотен)
и каждую представить в виде двух переменных: ссылка и анкор.

И хотелось бы обойтись без модуля-парсера. Использовать регулярное выражение.

Автор: Mosaicolor 10.2.2014, 14:42
Немного еще подумал...
Пожалуй, можно не 2 переменных, а одну - всю ссылку с анкором. 
Все равно они пишутся в БД, а разобрать их можно уже там, по-одной.

Основная сложность остается в том, что неизвестно, сколько ссылок.
 
Ссылки в итоге выбрал: s/href=(?:\"|\')?(.+?)(?:\"|\')(?:>|\s)/

Но они без анкоров. А нужны с анкорами. Подправьте, пожалуйста, регулярку.

Автор: alezzz 11.2.2014, 09:13
Забыл я уже эти SEO-шные термины smile, что есть анкор? вобщем какую строку/строки в результате хотите получить?

Автор: Mosaicolor 11.2.2014, 12:21
Спасибо, что откликнулись.

Из регулярного выражения, что я написал, я получаю только ссылку: /detalle-pieza-1533414.html

А нужна мне ссылка с анкором (текстом ссылки), вот такого вида: /detalle-pieza-1533414.html bomba direccion

Автор: alezzz 11.2.2014, 15:54
Цитата(Mosaicolor @  10.2.2014,  14:42 Найти цитируемый пост)
Ссылки в итоге выбрал: s/href=(?:\"|\')?(.+?)(?:\"|\')(?:>|\s)/

А вы еще и неправильно выбрали, так у вас вообще не должно было работать, или не дописали чего-то.

Код

my $href = '<a title="bomba direccion" class="aprovechamiento_pieza_envehiculo" href="/detalle-pieza-1533414.html">bomba direccion</a>';
if ($href =~ m#<a.+?href\s*=\s*["']([^"']+)["'][^>]*>([^<]+)<#){
    print "$1 - $2\n";
}

В большинстве случаев должно так работать, только проверку в while и модификатор g чтоб искал все ссылки. m## вместо стандартного // выбрал т.к. с тегами проще работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)