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

R3
На сайте с 16.08.2011
Offline
52
467

<?php

$content = '

<div>

<a href="http://www.site1.ru">Сайт1</a>

<a href="http://www.site1.ru" target="_blank">Сайт1</a>

<a href="http://www.site2.ru">Сайт2</a>

<a href="http://www.site2.ru" target="_blank">Сайт2</a>

</div>

';

preg_match_all("/<a\s+[^>]*?[^>]*>([^>]*[^>]>)/", $content, $matches, PREG_PATTERN_ORDER);

for ($i = 0; $i < count($matches[0]); $i++) {

$n2 = $matches0][$i];

echo "$i= ".$n2."<br>";

}

Есть переменная $content, необходимо с помощью регулярного выражения выбрать из неё только одну ссылку <a href="http://www.site1.ru">.

Попытался собрать такое, в итоге получилось лишь /<a\s+[^>]*?[^>]*>([^>]*[^>]>)/, которое выбирает все ссылки. Никак не пойму как составить выражение которое исключает, а не добавляет.

siv1987
На сайте с 02.04.2009
Offline
427
#1

/<a.+?href="(http:\/\/(?:www\.)?site1\.ru.+?)"[^>]*>(.+?)<\/a>/

[umka]
На сайте с 25.05.2008
Offline
456
#2

Если только код первой ссылки, то

preg_match('/<a\s+[^>]+>[^<]*<\/a>/', ...);

при условии что между тегами <a>…</a> нет других тегов.

Вообще, не совсем понятно, что вы пытаетесь выбрать. Жирным выделено одно, а судя по коду — вам нужно совсем другое.

Лог в помощь!
R3
На сайте с 16.08.2011
Offline
52
#3

[umka] - то что надо, вытаскивает именно нужный мне адрес!!!

Ещё вопрос, подскажите где почитать о регулярных выражениях. В инете много ресурсов, но от них голова взрывается. Нужно чтобы было разжёвано для чайника.

p.s. Мне нужно было выбрать именно адрес внутри которого нет target, дальше я его сравниваю с шаблоном и отсеиваю лишние.

[umka]
На сайте с 25.05.2008
Offline
456
#4

Ресурсов много, но синтаксис-то примерно одинаковый :)

Главное понять суть, как это работает.

Почитайте на pcre.ru, например, или купите книжку по Perl.

siv1987
На сайте с 02.04.2009
Offline
427
#5
roman3211:
то что надо, вытаскивает именно нужный мне адрес!!!
roman3211:
Мне нужно было выбрать именно адрес внутри которого нет target

Как-то снова все туманно расписано.. Так вам нужен конкретный адрес или тег в котором нету атрибута target?

R3
На сайте с 16.08.2011
Offline
52
#6

а perl и php - синтаксис одинаковый?

давайте объясню.

есть html документ, в котом много ссылок на разные ресурсы. Мне нужна только одна ссылка, начало которой я знаю.

я беру html в переменную и при помощи регулярного выражения выбираю все ссылки.

дальше сравниваю каждую с шаблоном

например:

есть

www.site1.ru/index.php?id=2&cs=0

www.site2.ru/index.php?id=6&cs=10

www.site3.ru/index.php?id=55&cs=0&ff=33

www.site4.ru/index.php?id=33&cs=6&dd=44

мне нужно только

www.site1.ru/index.php?id=2&cs=0

я сравниваю начало "www.site1.ru" с каждой ссылкой и вывожу ту, которая похожа

но в выборке оказалось 2 таких похожих ссылки, они одинаковые, только одна простая, вторая с target. Вот я искал как выбрать ссылки без таргета. А дальше вы уже знаете, сравню каждую с шаблоном и возьму нужную.

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