Простое регулярное выражение

Статус
В этой теме нельзя размещать новые ответы.

dmsoh

Профессор
Регистрация
27 Янв 2007
Сообщения
192
Реакции
44
Составил регулярное выражение для текста (изображен на картинке), но ничего не возвращает. Цель получить содержимое тега a. Подскажите, что не так написал.

PHP:
preg_match_all('/<div\s+class=[\'"]main[\'"]>+\n+\t{6}+\n+\t{7}+<a\s+href=[\'"](.*)[\'"]>/', $html, $result);
 

Вложения

  • rrrr.jpg
    rrrr.jpg
    6,3 KB · Просмотры: 31
На картинке у тебя символы \r изображены, а в регулярке их нет.
 
На картинке у тебя символы \r изображены, а в регулярке их нет.

Но вот так тоже не хочет работать

PHP:
preg_match_all('/<div\s+class=[\'"]main[\'"]>+\r+\n+\t{6}+\r+\n+\t{7}+<a\s+href=[\'"](.*)[\'"]>/', $html, $result);
 
Поставь \s+ и не парься, тебе принципиально чтобы табуляций было именно это количество? И зачем столько плюсов в регулярке.
 
Поставь \s+ и не парься, тебе принципиально чтобы табуляций было именно это количество? И зачем столько плюсов в регулярке.

Я просто не знаю как правильно. Не работает так:

PHP:
preg_match_all('/<div\s+class=[\'"]main[\'"]>\s+<a\s+href=[\'"](.*)[\'"]>/', $html, $result);
 
Все работает:
Код:
<?php
$w="... <div class=\"main\">\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t<a href=\"mislet.html\"> ...";
preg_match('/<div\s+class=[\'"]main[\'"]>\s+<a\s+href=[\'"](.*)[\'"]>/', $w, $m);
echo "[{$m[1]}]";
 
PHP:
string = '<div class="main">' .
		'' .
		'<a href="mislet.html">';

preg_match_all("/<div[^>]*class=\"main\"[^>]*>[^>]*<a[^>]*href=\"(.+?)\">/s", $string, $matches);

print_r($matches);
 
в первых вариантах, нужно обязательно экранировать одинарные и двойные ковычки врегулярном выражение - символам слеша :)
 
Кавычки и так везде экранированы.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху