Страницы: 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)*?>
Помогите создать универсальное регулярное выражение чтобы работала во всех возможных вариантах
Отсутствует
Если не трудно. то скажите как этот самый href попадает в строку? Просто тут люди, видимо, привыкли, что "строка = регулярное выражение"...
Продам: совесть, ответственность, вежливость, воспитанность. Недорого.
Отсутствует
Не знаю на чём нужно писать ваше выражение, но если то что вы дали сохранить в файл 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)
Отсутствует
(?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
Отсутствует
Страницы: 1