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


Автор: Orient 21.9.2009, 19:54
Здравствуйте  столкнулся со странной проблемой

Есть сайт http://dle.good-advices.com/

На этой станице есть текст с ссылками:
Код


<a href="http://test.com?url=00001" target="_blank" rel="nofollow">скачать с test.com1 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00002" target="_blank" rel="nofollow">скачать с test.com2 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00003" target="_blank" rel="nofollow">скачать с test.com3 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00004" target="_blank" rel="nofollow">скачать с test.com4 </a>



Собственно мне надо вынуть все ссылки с этого блока, которые ведут на сайт test.com.
Я использую вот такую регулярку:
Код

$mask = '|<a(.*)href="(.*)'. $value[ 'host' ] .'(.*)".*>|';
preg_match_all( $mask, $txt, $arr );
print_r( $arr );



В результате получаю вот это:
Код

Array
(
    [0] => Array
        (
            [0] => <a href="http://test.com?url=00001" target="_blank" rel="nofollow">скачать с test.com1 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00002" target="_blank" rel="nofollow">скачать с test.com2 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00003" target="_blank" rel="nofollow">скачать с test.com3 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00004" target="_blank" rel="nofollow">скачать с test.com4 </a></noindex></b></div></td>
        )

    [1] => Array
        (
            [0] =>  href="http://test.com?url=00001" target="_blank" rel="nofollow">скачать с test.com1 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00002" target="_blank" rel="nofollow">скачать с test.com2 </a></noindex></b><br />test   <b><noindex><a href="http://test.com?url=00003" target="_blank" rel="nofollow">скачать с test.com3 </a></noindex></b><br />test   <b><noindex><a 
        )

    [2] => Array
        (
            [0] => http://
        )

    [3] => Array
        (
            [0] => ?url=00004" target="_blank" rel="nofollow
        )

)


Т.е. моя регулярка почему-то воспринимает этот блок как одну большую ссылку. Как мне вынуть из него все мои ссылки? Не подскажете ли как это сделать?

Спасибо

Автор: NLspieler 22.9.2009, 03:16
Код

$domen = 'test.com' ;
$pattern = '/(http:\/\/' . $domen . '\S+)\"/';
preg_match_all ( $pattern , $text , $array) ;
$links_array = $array[1] ;
print_r ($links_array) ;

Автор: Orient 22.9.2009, 08:15
NLspieler, Спасибо большое, помогло. А нельзя ли пояснить почему моя маска не работала? И в чем особенность применения \S в маске?

Автор: Ferroks 22.9.2009, 09:35
мне тож помогите с регуляркой

есть html

структура такая

<DIV id=main>
<DIV id=main-content>
тут всяка хрень
<DIV>всяка хрень</DIV>
</DIV></DIV>

составил регулярку

preg_match('/<div(.*?)(id=main-content>)(.*?)<\/div><\/div>/i', $text,$mathces)

echo $mathces ничего не выводит

Автор: NLspieler 22.9.2009, 18:08
Orient
\w символ слова: ангиские буквы и цифры.
\W все, кроме ангиских букв и цифр
\s пробельный символ: пробел, табуляция, первод строки, первод каретки
\S не пробельный мимвол
\d цифра
\D все, кроме цифры

\S+ означает любое количество не пробелов

Почему твоя регулярка не работает, не знаю.
Расшифровать не удается

Ferroks
А что должно получится в результате?

Автор: Ferroks 23.9.2009, 14:00
Цитата(NLspieler @  22.9.2009,  18:08 Найти цитируемый пост)
FerroksА что должно получится в результате?

нужно получить вот это

<DIV id=main-content>
тут всяка хрень
<DIV>всяка хрень</DIV>
</DIV>

Автор: NewDima 25.9.2009, 06:54
Ferroks, зачем здесь регулярка?  smile 

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