[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярное выражение с src
Tuezov
Нужно написать универсальное регулярное для src

Есть несколько вариантов

Во первых:

<img src="lala">
<img src ="lala">
<img src = "lala">

Во вторых:

Есть еще и <embed src="flash/Antitelo.swf"

Соответственно

<embed src="flash/Antitelo.swf"
<embed src ="flash/Antitelo.swf"
<embed src= "flash/Antitelo.swf"

Мне нужно получить то, что находиться в " ".

В случаи с <embed src="flash/Antitelo.swf", мне нада получить flash/Antitelo.swf




Спустя 1 час, 32 минуты, 37 секунд (1.02.2011 - 21:28) Dron19 написал(а):

$text = '<img title="" src="flash/Antitelo.swf" alt="zalupa">';

$replace = preg_replace("/<.*?\s?src\=(\"|')(.*?)\\1\s?.*?>/i","\\2",$text);
echo $replace . "<br>"; // flash/Antitelo.swf

Вариант подуйствует для любого тэга, который имеет атрибут src и вытащит его
Если подошло, то с тебя плюс :)

Спустя 14 минут, 2 секунды (1.02.2011 - 21:42) Dron19 написал(а):
На сколько я понял она тебе нужна сильно, тогда лучше вот так ее оформить :)

<?php
function
src_from_tag($tag) {
return preg_replace("/<.*?\s?src\=(\"|')(.*?)\\1\s?.*?>/i","\\2",$tag);
}

$text = '<img title="Ыыыыы" src="flash/Antitelo.swf" alt="test">';
echo src_from_tag($text) . "<br>"; // flash/Antitelo.swf




$text = '<embed src="test.jpg">';
echo src_from_tag($text) . "<br>"; // test.jpg
?>


Примечание к функции: - вернет значение src тэга в том случае, если тэг одинарный и оформлен в <>, то есть обычный нормальный тэг... Тогда функция будет работать корректно.
С тебя плюс ;)

Спустя 14 минут, 59 секунд (1.02.2011 - 21:57) Dron19 написал(а):
а если ты работаешь с utf-8, то в конце регулярке, там где стоит i, добавь u

Спустя 13 часов, 46 минут, 21 секунда (2.02.2011 - 11:43) Tuezov написал(а):
Dron19 спасибо большое. Интересно именно следующее

1) <img src="need";
2) <img border src="need"

Т.е не факт, что нужен будет именно img потом src

Src может быть и через 4 колена после img

Спустя 1 час, 21 минута, 36 секунд (2.02.2011 - 13:05) DedMorozzz написал(а):
Tuezov
В принципе регулярка
/<.*?\s?src\=(\"|')(.*?)\\1\s?.*?>/i","\\2"
верна, за некоторой поправкой. Совершенно не ясно зачем в начале стоит \s? и для какой цели проэкранирован НЕ СПЕЦ СИМВОЛ "равно"
Итого, в не зависимости где будет СРК регулярка имеет вид:
$a = preg_replace('#<.*?src\s*=\s*("|\')(.*?)\\1#us',"\\2", $text);

В данном случае рассматривается работа с юникодом. Иного и не должно быть

Спустя 39 минут, 54 секунды (2.02.2011 - 13:45) Dron19 написал(а):
тебе уже помогли, в моей регулярке только лишь последнюю > убрали и все smile.gif

Спустя 7 минут, 37 секунд (2.02.2011 - 13:53) DedMorozzz написал(а):
Dron19, можно и так сказать. Только не одним > ограничилось.
/<.*?  (\s?)--1  src(тут добавил)---- 2(\) ---- 3=(тут добавил)---4(\"|')(.*?)\\1*(\s?.*?>)----5/i(тут добавил)---- 6","\\2"

1 - лишняя запись
2 - добавил условие пробелов. Они веть могут быть. Верно?
3 - экранировать равно смысла нету
4 - то же самое что и 2
5 - этот кусок не нужен. Зачем обрабатывать то, что и так нам не надо. Это же лишнее время и выч. мощностя
6 - добавил модификатор юникода и что бы точка включала в себя перенос строки. Мало ли как располагаться будет тег.

В целом достаточно не плохо.

Спустя 2 минуты, 41 секунда (2.02.2011 - 13:55) Dron19 написал(а):
Я стараюсь... smile.gif



Спустя 32 секунды Dron19 написал(а):
раньше я не мог вообще быстро составить регЭксп, а сейчас уже бегло получается, как раз благодаря тебе smile.gif

Спустя 3 часа, 57 минут, 36 секунд (2.02.2011 - 17:53) Tuezov написал(а):
А можно с preg_match пример?

Спустя 35 минут, 6 секунд (2.02.2011 - 18:28) Dron19 написал(а):
preg_match всего лишь возвращает true если найдет совпадение с регулярным выражением. Блин, с тебя плюс smile.gif Я тебе тут целую функцию писал, хотел помочь, а ты...

Спустя 3 минуты, 11 секунд (2.02.2011 - 18:31) Tuezov написал(а):
Вот мне и нужно получить массив.
Я лично вообще написал так preg_match_all('|<img *src="(.*)">|isU',$text,$img);
А нужно <img (любый символы сколько угодно, до пробел src)

Спустя 1 минута, 57 секунд (2.02.2011 - 18:33) DedMorozzz написал(а):
Цитата (Tuezov @ 2.02.2011 - 16:53)
А можно с preg_match пример?

да, можно. Найди нужнее тебе вхождение и запиши в массив. Инфа, в принципе у тебя вся есть. Изменять надо будет не много.
Самое главное - алгоритм уже на руках.
Если у самого желания делать нету - за 3$ или 50р напишу готовое решение.
Хотя основное тебе уже написали.

Спустя 1 минута, 18 секунд (2.02.2011 - 18:34) Tuezov написал(а):
DedMorozzz Я плохо понимаю регулярные выражения. Как отразить любое кол -во символом до пробел src?

Спустя 3 минуты, 22 секунды (2.02.2011 - 18:38) DedMorozzz написал(а):
Как отразить любое кол -во символом до пробел src
.*? src

Спустя 1 минута, 57 секунд (2.02.2011 - 18:40) Tuezov написал(а):
Что то так не робит preg_match_all('|<img .*? src="(.*)">|isU',$text,$img);

Спустя 5 минут, 9 секунд (2.02.2011 - 18:45) DedMorozzz написал(а):
echo "<pre>";
print_r($img);
echo "</pre>";
И смотри номер нужного элемента

Спустя 2 минуты, 53 секунды (2.02.2011 - 18:48) Tuezov написал(а):
Array
(
[0] => Array
(
)

[1] => Array
(
)

)

Вот результат по preg_match_all('|<img .*? src="(.*)">|isU',$text,$img);
Мб как то по другому или у меня ошибка в синтаксисе?

Спустя 5 часов, 36 минут, 8 секунд (3.02.2011 - 00:24) DedMorozzz написал(а):
src="
пробелов нету между равно?


_____________
Туезов А.В
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.