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

12
[Удален]
817

Голова уже у меня дымиться, нужна ваша помощь:

нужно вырезать урл:

<a href="site.ru" alt=Вася пупкин >

<a href=" site.ru " alt=Вася пупкин >

<a href='site.ru' alt=Вася пупкин >

<a href=site.ru alt=Вася пупкин >

причем все комбинации могут встречаться на одном сайте в разной последовательности

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

_savit
На сайте с 19.03.2006
Offline
135
#1

если все в точности так как вы написали и alt идет всегда после href ... то можно таким например способом получить все ссылки

$count=preg_match_all('/href=(.*?)alt/i',$content,$m);

$search=array('"',"'");

for($i=0; $i<$count; $i++)

print trim(str_replace($search,'',$m[1][$i]))."\n";

https://vk-botovod.ru - комбайн ВКонтакте, мультимессенджер, эмулятор жизни аккаунтов
[Удален]
#2

alt в качестве примера был, он не обязательно есть, к нему привязываться нельзя.

D
На сайте с 14.01.2007
Offline
153
#3

/href=([^\s]+)/

_savit
На сайте с 19.03.2006
Offline
135
#4

Dinozavr, тогда с этим вариантом будет трабл

<a href=" site.ru " alt=Вася пупкин >

D
На сайте с 14.01.2007
Offline
153
#5

каюсь, проглядел. но тогда я бы не мучался, а делал бы больше одного regexp или выбирал бы <а...> и разбирал бы потом по косточкам. зависит от того, насколько мы "экономим"

о, выбираем <а...>, split по пробелам, ищем href и смотрим длину, если = 6, берем след. элемент. Если больше, то вытаскиваем домен

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

/<a href=["'\s]*([^"'\s>]+)/

Лог в помощь!
[Удален]
#7

Из предложенных вариантов ни какой пока корректно не отработал :(

Спасибо что откликнулись, а не остались равнодушны к моей задачке.

D
На сайте с 14.01.2007
Offline
153
#8

а чем вариант от[umka] не подходит?

[Удален]
#9

]+) Array ( [0] => Array ( [0] => Array ( [0] => s [1] => s [2] => s [3] => s ) ) Как должно быть: Array ( [0] => Array ( [0] => [1] => [2] => [3] => ) [1] => Array ( [0] => [1] => [2] => [3] => ) [2] => Array ( [0] => " [1] => ' [2] => [3] => " ) [3] => Array ( [0] => [1] => [2] => [3] => ) [4] => Array ( [0] => site1.ru [1] => site2.ru [2] => site3.ru [3] => ) [5] => Array ( [0] => " [1] => ' [2] => [3] => ) [6] => Array ( [0] => alt=Вася пупкин [1] => alt=Вася пупкин [2] => alt=Вася пупкин [3] => site4.ru " alt=Вася пупкин ) )

PR
На сайте с 30.12.2007
Offline
140
#10

Это вы что-то не так сделали, он рабочий.

$subject = <<<HTML

<a href="site.ru" alt=Вася пупкин >
<a href=" site.ru " alt=Вася пупкин >
<a href='site.ru' alt=Вася пупкин >
<a href=site.ru alt=Вася пупкин >'
HTML;

$pattern = '#href=["\'\s]*([^"\'\s>]+)#i';

if (preg_match_all($pattern, $subject, $matches)) {
print_r($matches);
}


Array
(
[0] => Array
(
[0] => href="site.ru
[1] => href=" site.ru
[2] => href='site.ru
[3] => href=site.ru
)

[1] => Array
(
[0] => site.ru
[1] => site.ru
[2] => site.ru
[3] => site.ru
)

)
12

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