Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите поправить паттерн пожалуйста...
 
 автор: AlexDIXI   (02.09.2009 в 23:40)   письмо автору
 
 

Есть код сайта например:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=WINDOWS-1251" /><title>----</title><link rel="icon" href="/favicon.ico" type="image/x-icon" /><link rel="stylesheet" type="text/css" href="/f/1/i/vlalek.css" media="all" /><link rel="stylesheet" type="text/css" href="/f/1/i/main.css" media="all" /><link rel="stylesheet" type="text/css" href="/f/1/i/print.css" media="print" />


Написал вот такой код:


<?php
echo "<pre>";

$contents file_get_contents("http://domains.com");

preg_match_all("#href=(.+?\.css)#is"$contents$arr_css);

print_r($arr_css);

?>


Задумка такая, нужно выдернуть только имена css файлов например (href="/f/1/i/vlalek.css") только то, что выделенно жирным.. Но у меня получается следующее:


Array
(
    [0] => Array
        (
            [0] => href="/favicon.ico" type="image/x-icon" /><link rel="stylesheet" type="text/css" href="/f/1/i/vlalek.css
            [1] => href="/f/1/i/main.css
            [2] => href="/f/1/i/print.css
        )

    [1] => Array
        (
            [0] => "/favicon.ico" type="image/x-icon" /><link rel="stylesheet" type="text/css" href="/f/1/i/vlalek.css
            [1] => "/f/1/i/main.css
            [2] => "/f/1/i/print.css
        )

)


Помогите пожалуйста, заранее спасибо..

  Ответить  
 
 автор: heed   (02.09.2009 в 23:57)   письмо автору
 
   для: AlexDIXI   (02.09.2009 в 23:40)
 

самое простое это вместо
.+?
сделать
[^>]+?
чтобы не выходило за пределы тега

ненамного точнее было-бы например после кавычки если есть
[\'\"]?
выбирать нескобки некавычки и непробелы
[^\s\"\'>]+?

  Ответить  
 
 автор: AlexDIXI   (03.09.2009 в 00:02)   письмо автору
 
   для: heed   (02.09.2009 в 23:57)
 

[^>]+?
с таким параметром работат. Спасибочки огромное!
а вот с этим пробоавал вместо выше, [\'\"]? и с этим [^\s\"\'>]+? возвращает пустой массив.. Я не правильно понял Вас или Вы ошиблись?

  Ответить  
 
 автор: AlexDIXI   (03.09.2009 в 00:08)   письмо автору
 
   для: AlexDIXI   (02.09.2009 в 23:40)
 

С таким паттерном:
<?php
preg_match_all
("#href=[^>]+?\.css#is"$contents$arr_css); 
?>


Выводит:
Array
(
    [0] => Array
        (
            [0] => href="/f/1/i/vlalek.css
            [1] => href="/f/1/i/main.css
            [2] => href="/f/1/i/print.css
        )

)

Уже как бы есть с чем работать, но можно ли поправить паттерн что б выводило так:


Array
(
    [0] => Array
        (
            [0] => /f/1/i/vlalek.css
            [1] => /f/1/i/main.css
            [2] => /f/1/i/print.css
        )

)

  Ответить  
 
 автор: heed   (03.09.2009 в 00:14)   письмо автору
 
   для: AlexDIXI   (03.09.2009 в 00:08)
 

я имел ввиду что-то такое
'#href=["\']?([^\s"\'>]+?\.css)#i'
или например жадное , но с последующим заглядыванием назад
'#href=["\']?([^\s"\'>]++)(?<=\.css)#i'
/s не поставил потомучто в шаблоне нет метасимвола точки

// непроверял

  Ответить  
 
 автор: heed   (03.09.2009 в 00:26)   письмо автору
 
   для: AlexDIXI   (03.09.2009 в 00:08)
 

> можно ли поправить паттерн что б выводило так

теоретически можно , сделав что-то типа (?<=href=[\'\"]) вместо href=
, но практически лучше выбрать нужное подмаской ([^>]+?\.css),
потомучто каждая нескобка в качестве первого символа будет срабатывать почти на всех символах, и выражение закончится неудачей только после того как проверит все возможные варианты,
а href , встречается сравнительно реже, и фиктивных совпадений будет намного меньше

  Ответить  
 
 автор: AlexDIXI   (03.09.2009 в 00:31)   письмо автору
 
   для: heed   (03.09.2009 в 00:26)
 

Ага, все понял.. Спасибо огромное еще раз..

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования