Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№101-08-2009 23:18:16

AnalogXP
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 27
UA: Seamonkey 1.1

Регулярные выражения

Здравствуйте!

Не пинайте, если не там создал топик, просто не знаю где спросить. Вроде были такие темы...
Помогите пожалуйста с регулярными выражениями (regexpr - http://regexpstudio.com/ )
Мне нужно вытянуть из исходного кода веб страницы, путь к favicon.ico (название иконки может быть иным)
Вот примеры строк вытянутых с разных сайтов:

1. <link rel="shortcut icon"
                         href="http://www.domaintools.com/favicon.ico" />

2. <link rel="SHORTCUT ICON" href="/favicon.ico" />

3. <link href="http://templates.33b.ru/33b.ru/favicon.ico" rel="shortcut icon">

4. <link rel="icon" href="http://www.avangate.com/favicon.ico" type="image/x-icon"/>

5. <link rel="shortcut icon" href="/images/plimus_wave.ico" />

6. <LINK REL="SHORTCUT ICON" href="/favicon.ico">

7. <link rel="shortcut icon" type="image/ico" href="/images/favicon.gif" />

8. <link href="favicon.ico" rel="shortcut icon">

9. <LINK REL="shortcut icon" HREF="../favicon.ico" TYPE="image/x-icon">

10. <link type="image/x-icon" href="http://www.alexa.com/favicon.ico" rel="icon">

11. <link rel="shortcut icon" type="image/ico" href="http://solsie.com/wp-content/themes/Peace/favicon.ico" />

Как видно, все они чем-то отличаются, но и многим похожи. Так вот мне нужно получить то что находится между кавычками HREF="*******"
Мне самому удалось кое что сделать, но не работает для всех приведенных примеров.

(?i)<link rel="(shortcut icon|icon)"\s*(href)="(.*?.ico)"(.| \r|\n)*?>

Помогите создать универсальное регулярное выражение чтобы работала во всех возможных вариантах

Отсутствует

 

№202-08-2009 00:18:20

ПротопопулуS
2,4716 THz на каждое из 64-х ядер...
 
Группа: Members
Откуда: Местное я
Зарегистрирован: 16-12-2008
Сообщений: 1515
UA: Minefield 3.6

Re: Регулярные выражения

Если не трудно. то скажите как этот самый href попадает в строку? Просто тут люди, видимо, привыкли, что "строка = регулярное выражение"... :)


Продам: совесть, ответственность, вежливость, воспитанность. Недорого.

Отсутствует

 

№302-08-2009 00:57:59

WiseLord
Апологет Gentoo
 
Группа: Extensions
Откуда: Минск, Беларусь
Зарегистрирован: 03-11-2005
Сообщений: 539
UA: Firefox 3.5

Re: Регулярные выражения

Не знаю на чём нужно писать ваше выражение, но если то что вы дали сохранить в файл test, то выделить ссылки получается bash-скриптом с использованием sed, например, так:

cat test | sed -e s/'.\+[Hh][Rr][Ee][Ff]="\([^"]\+\)".\+'/'\1'/g

(кроме примера 1, разбитого на две строки, если бы их склеить в одну - работало бы)
Суть - выражение .\+[Hh][Rr][Ee][Ff]="\([^"]\+\)".\+ заменяется на \1 ,т.е. на запомненное в скобках выражение [^"]\+\

Переводя на "русский": находим строку, в которой идут .\+ (любое количество любых символов), затем href независимо от регистра, затем =", затем [^"]\+ (любое количество любых символов кроме "), это выражение запоминается в скобках \( \), затем идёт ".\+ (кавычки любое количество любых символов) и заменяем эту строку на \1 - то что запомнили, т.е. выражение между двумя "
На php на preg_replace должно быть что-то похожее

Отредактировано WiseLord (02-08-2009 01:00:31)

Отсутствует

 

№402-08-2009 00:58:06

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508
UA: Shiretoko 3.5

Re: Регулярные выражения

AnalogXP пишет

(?i)<link rel="(shortcut icon|icon)"\s*(href)="(.*?.ico)"(.| \r|\n)*?>

Для какого диалекта регулярных выражений?

Хорошая новость: вышла книжка Джефри Фридла про регулярные выражения, третье издание. Плохая новость: дорого.

Для Perl 5/PCRE

Выделить код

Код:

<link[ \t]+[^<>\n\r]*(?:rel="(?:shortcut )?icon"[^<>\n\r]*[ \t]+href="([^<>\n\r"]*)"|href="([^<>\n\r"]*)"[^<>\n\r]*[ \t]+rel="(?:shortcut )?icon")[^<>\n\r]*/?>

флаги mi

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]