Опять регулярные выражения

Ihorko

Новичок
Регулярное выражения - выбрать все между А и В

Есть следующее регулярное выражение
PHP:
$Expression = "|<a href=\"(.*)\">|";
котое должно вытянуть из страницы все ссылки, то есть текст, который находится между <a href=" и ">
На некоторых страницах работает нормально, на некоторых нет (выбирает больше чем надо).

Подскажите пожалуйста, может как-нибудь иначе переписать выражение...
Я пробовал
PHP:
$Expression = "|<a href=\"[[:print:]]\">|";
и
PHP:
$Expression = "|<a href=\"[[:graph:]]\">|";
но в этом случае вообще не тянет.

PS: Все ссылки такого типа <a href="http://phpclub.ru/">Text</a>
 

FireNet

Новичок
слышал о жадности квантификаторов * и +, тем более в сочетании .* и .+ ? Посмотри хороший ман по регуляркам. Именно по регулярным выражениям, а не по тому, как их юзать в пхп. Той инфы по рег. выражиниям , что пишут в учебниках по PHP очень мало.

http://www.pcre.ru/ вполне подойдет.

В данном случае нужно составить его так, чтобы искал все между <a и </a
 

FireNet

Новичок
.* означает все символы кроме newlline вроде, то есть в данном случае он соберет все от первого <a href" до последнего "> перед символом \n.
Поправьте, если ошибаюсь.
Был хороший мануал, перловый, поищи поиском "мануал по регулярным выражениям" или "regexp2.pdf".
 

WP

^_^
Элементарно.
PHP:
$s = 'abcabc';
preg_match('~a.*b~',$s,$m);
var_dump($m);
При обработке этого выражения есть два варианта, первый это ab, второй abcab. Можно задать какой из этих вариантов следует использовать.
А если дать определение, то Жадные объекты обрабатываются с самым длинным вариантом, а Нежадные - с самым коротким.
Жадность инвертируется знаком '?'. Либо же модификатором U.

-~{}~ 27.09.06 22:07:

FireNet
Шел бы ты...
 

FireNet

Новичок
WP, а ПРАВИЛА ФОРУМА, раздел Как общаться на форуме, пункт 1., ты наверно не читал?
 

WP

^_^
FireNet
Читал. Поэтому и прошу уйти (в мануал) с миром :) Т.к. ты флудишь не в первый раз.
 

Wicked

Новичок
FireNet
по поводу мануалов:
1) pcre.ru - кунсткамера.
2) наиболее достоверным маном является первоисточник -http://www.pcre.org/pcre.txt
3) предостаточным, и наиболее относящимся к теме - http://ru.php.net/pcre -> Pattern Modifiers / Pattern Syntax
 

FireNet

Новичок
Спасибо, буду знать. А чем плохи эти два перевода?

Pattern Modifiers - http://www.pcre.ru/docs/php/text/stdmod/
Pattern Syntax - http://www.pcre.ru/docs/php/text/stdsyntax/

Английский учу, но сразу его не выучишь...
 

Wicked

Новичок
ну хотя бы этим:
1) тем, что это переводы
2) тем, что им уже по полгода
3) тем, что там нету user notes
 

Wicked

Новичок
baev
ну я принципиально читаю на английском, так что тут уж как посмотреть: ошибся или все таки нет? :)
 

Alex_v.tv

Новичок
доброй ночи!

про жадность здесь:
http://phpclub.ru/detail/article/simple_regular

похоже задачи у нас сходные :)

-~{}~ 27.09.06 23:59:

да, не подскажете, как в регулярку переменную запихнуть?

т.е., например надо включить в выражение $url:

PHP:
preg_match_all("/<(a|A)(.*)href=(\'|\")%$url%(.*)(\'|\")(.*)<\/(a|A)>/", $page, $link);
 

Ihorko

Новичок
Автор оригинала: Alex_v.tv
да, не подскажете, как в регулярку переменную запихнуть?
Не знаю, получится ли так прямо, но можно сначало записать в переменную, а потом смело использовать
 

Alex_v.tv

Новичок
необходима предварительная компиляция, но как? кучу манов облазил ...
 

Ihorko

Новичок
Если честно, я не понимаю что такое "предварительная компиляция"... :)
 

Alex_v.tv

Новичок
Не знаю, получится ли так прямо, но можно сначало записать в переменную, а потом смело использовать
ессно, токо это не пашет из-за наличия // ))), а я полез в дебри

всё, пора спать
 
Сверху