Помогите пожалуйста с шаблоном для preg_match

12
S
На сайте с 15.04.2009
Offline
24
2100

Здравствуйте, не могу понять как сделать шаблон, вот кусочек с php :


if( preg_match('/<a href=(*?)/', $myrow["full_story"], $matches) ) {
echo $matches[0];
}

Вылетает ошибка :(

А должна находится ссылка вида:

<a href=\"http://site.ru\" target=\"_blank\" rel=\"nofollow\">site.ru</a>

Цель скрипта замена ссылки на текст, тоесть чтобы было просто http://site.ru, может это можно сделать самим preg_replace без помощи preg_match?

Маленький Оффтопик: Так как http://site.ru движком серча, делается как ссылка, решил проверить пузо :) ТИЦ 500 PR4(5) :bl:

4arger
На сайте с 17.12.2008
Offline
95
#1

if( preg_match('/<a href=(.*)<\/a>/', $myrow["full_story"], $matches) ) {

echo $matches[0];

}

S
На сайте с 15.04.2009
Offline
24
#2

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 9 и до этого тоже эту ошибку выдавало :(

4arger
На сайте с 17.12.2008
Offline
95
#3

scaby, у меня этот код работает.


<?php
$myrow["full_story"]="Some text <a href=\"http://site.ru\" target=\"_blank\" rel=\"nofollow\">site.ru</a> some text";
if( preg_match('/<a href=(.*)<\/a>/', $myrow["full_story"], $matches) ) {
echo $matches[0];
}
?>
S
На сайте с 15.04.2009
Offline
24
#4

Подскажите пожалуйста, что означает эта часть шаблона(.*), и чем отличается от (*?) ?

У меня тоже этот код работает, только он достает все между href= <\/a>, а мне надо только адрес куда ведет ссылка, а там эти слэши и кавычки не могу с ними разобраться

4arger
На сайте с 17.12.2008
Offline
95
#5

вот попробуйте:


<?php
$myrow["full_story"]="Some text <a href=\"http://site.ru\" target=\"_blank\" rel=\"nofollow\">site.ru</a> some text";
if(preg_match('/<a href="(.*)"/',$myrow["full_story"],$matches) ){
echo $matches[1]."<br>";
$url=preg_replace('/"(.*)/','',$matches[1]);
echo $url;
}
?>

реализация, конечно, не очень, зато работает ).

BD
На сайте с 22.03.2010
Offline
5
#6
scaby:
Подскажите пожалуйста, что означает эта часть шаблона(.*), и чем отличается от (*?) ?

По умолчанию используется жадный алгоритм, второй шаблон - нежадный.

Если есть такой код:

текст <a href="http://site.ru">site.ru</a> текст <a href="http://site2.ru">site2.ru</a> текст

жадный захватит наибольшее вхождение, то есть

<a href="http://site.ru">site.ru</a> текст <a href="http://site2.ru">site2.ru</a>

нежадный - наименьшее

<a href="http://site.ru">site.ru</a>
P
На сайте с 19.12.2008
Offline
11
#7


preg_match_all('@href=["|\']([^"|\']*)["|\']@i', $in, $out);

Вот.

[Удален]
#8

Pinokio, не обработает ссылки, написнными мудаками - не обрамленые ни во что :)

P
На сайте с 19.12.2008
Offline
11
#9

bearman, тоже верно, ну я например обычно с такими сайтами не связываюсь >.<

Ну можно вот так, допилить:


preg_match_all('@href=["|\']?([^"|\'|\s]*)["|\']?@i', $in, $out);

Не забываем, что на выдаче имеем многомерный массив.

[Удален]
#10

Pinokio, уже лучше :)

bearman добавил 06.06.2010 в 20:42

только я еще бы * на + заменил наверное, пустые ссылки ни к чему вероятно)

12

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