[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярка для <a>
RCuPeR
Всем привет.
Есть html код такого вида:
<td id="tn"><a href="http://bla.ru/legislation/tnvd/tnvd_1.html">Живые животные</a></td>


C неё нужно выдрать "Живые животные".

preg_match_all("/<a href=\"(.*)\">(.*)<\/a>/isU", $value, $a, PREG_PATTERN_ORDER);


Выгребает ссылку, "Живые животные" и путь http://bla.ru/legislation/tnvd/tnvd_1.html. Но это всё лишнее.

preg_match_all("/<a>(.*)<\/a>/isU", $value, $a, PREG_PATTERN_ORDER);


Не помог вообще.



Спустя 5 часов, 20 минут, 43 секунды (6.03.2011 - 04:04) inpost написал(а):
Начиная с <a любые символы (не жадный поиск: в конце добавляешь ? ), закрываешь а, потом в скобки берёшь не жадный поиск снова, и закрывающий тег а за скобками.
Все, что в скобках попадает в 4-ый параметр: $search[1].

Спустя 9 часов, 41 минута, 46 секунд (6.03.2011 - 13:45) RCuPeR написал(а):
О Господи ?! А тебе не проще было бы это кодом написать ?!

Спустя 3 часа, 6 минут, 12 секунд (6.03.2011 - 16:52) inpost написал(а):
RCuPeR
честно? Проще, но тогда не прибавится знаний у тебя =)
Не жадный поиск любых символов: .*? , при этом используй модификаторы: ius

Добавлю, жадный будет искать до последнего тега </a>, а не жадный - до первого встречного по пути </a>, если использовать такую конструкцию: .*?</a>

Спустя 5 часов, 36 минут, 23 секунды (6.03.2011 - 22:28) RCuPeR написал(а):
Ну ты как всегда. Спасибо, получилось.

Спустя 1 день, 3 часа, 45 минут, 3 секунды (8.03.2011 - 02:13) Santehnick написал(а):
Цитата (inpost @ 6.03.2011 - 13:52)
RCuPeR
честно? Проще, но тогда не прибавится знаний у тебя =)
Не жадный поиск любых символов: .*? , при этом используй модификаторы: ius

Добавлю, жадный будет искать до последнего тега </a>, а не жадный - до первого встречного по пути </a>, если использовать такую конструкцию: .*?</a>

можно вопрос? вот вы пишите, что использовать модификаторы ius, в числе которых и модификатор U, который инвертирует жадность квантификаторов, то есть делает их "нежадными" по умолчанию и жадными если после них, стоит знак '?'. Поэтому получается, что в вашем примере, квантификаторы будут жадными, а не наоборот, если использовать U и знак ? .


<?php
$str = '<td id="tn"><a href="http://bla.ru/legislation/tnvd/tnvd_1.html">Живые животные</a></td>' ;
preg_match_all('/<a(.*)>(.*)<\/a>/Ui', $str, $maches) ;

echo $maches[2][0] ; // Живые животные
?>

Спустя 7 минут, 39 секунд (8.03.2011 - 02:21) inpost написал(а):
Santehnick
u - маленькое, это для работы с кодировкой UTF-8.
В добавок не за чем забивать память из Вашего примера лишней ссылкой. Первые скобки нужно убрать.

RCuPeR
|<a.*?>(.*?)</a>|ius - попадёт в search[1]

Спустя 2 дня, 2 часа, 20 минут, 59 секунд (10.03.2011 - 04:42) Santehnick написал(а):
inpost, спасибо за ответ. но позвольте спросить, разве есть какая-то разница между U и u? я уже давно работаю с кодировкой utf-8 и нет разницы если написать и так и так, эффект будет одинаковый, т.е. регулярка будет работать под utf-8 и причем сделает все квантификаторы не жадными по умолчанию. Т.е. точно нет нужды использовать знак вопроса после них.

Спустя 28 минут, 38 секунд (10.03.2011 - 05:10) inpost написал(а):
Santehnick
U - Этот модификатор инвертирует жадность квантификаторов
u - работает с кодировкой UTF-8

Насчет жадности ты прав, но работая в UTF стоит добавить ещё и u маленький.


_____________
Гнусный социопат с комплексом Бога.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.