Регулярное выражение для получения внутренних ссылок - нужно подправить

[Удален]
1092

Вот мое регулярное выражение для нахождения внутренних ссылок на странице. Вот с абсолютными путями:

@preg_match_all('/<a([^<]*?)href=[\'"](http:\/\/(www\.)?'.$host.'[^\'"]*?)[\'"]/i',$html,$matches);

Вот с отностельными:

@preg_match_all('/<a\s([^<]*?)href=[\'\"]?(?!https?:|mailto:|ftps?:)(\.{0,2}\/)?([^<>\'\"]+)[\'\"]?/im',$html,$matches);

Я выяснил, что они не учитывают случай, если верстка не предусматривает кавычки, окружающие адрес. Вот пример:

<a href=http://www.site.com/1.php target=_self>page title</a><br>

Как сделать так, чтобы верстка учитывала?

[Удален]
#1
plamar:
Как сделать так, чтобы верстка учитывала?

ручками :)

Bitman
На сайте с 05.07.2009
Offline
112
#2

[\'"]* .

Северный лес (https://euro-vagonka.by) DREW (https://drew.by) AvtoDrive (https://avtodrive.by)
skAmZ
На сайте с 04.09.2009
Offline
122
#3

Встречал ссылки в таком виде: <a href = http://www.site.com/1.php>page title</a>

Вместо "href=" используй "href[= ]+"

frantic
На сайте с 09.02.2009
Offline
27
#4

вместо


[\'"]


[\'"]?

а не тогда последнее условие не сработает. пиши так


#<a([^<]*?)href=[\'"]?(http://(www\.)?'.$host.'[^\'"> ]*?)[\'"> ]#i

я что то не понимаю назначение внешних круглых скобок. зачем это?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий