$text='<img src="style/logo.jpg" border="0">
<img src="http://my.ru/css/1.jpg" border="0">';
нужно составить регулярку так, что если в тексте нашлось src="(без http|https), то заменяем его на src="http://my.ru/
вот, что я попробовал
$text=preg_replace("/src=\"([^http]|[^https])+/i", "src=\"http://my.ru/",$text);
но так сразу две ошибки есть, во-первых он смотрит не все слово а только на наличие одной из букв(h,t,p,s)
а во-вторых, если даже находит, то эту букву он также считает за найденное, а надо чтобы это было лишь проверкой, а заменялось только то что до этого.
помогите пожалуйста!
то есть нужно получить в итоге так
$text='<img src="http://my.ru/style/logo.jpg" border="0">
<img src="http://my.ru/css/1.jpg" border="0">';
Спустя 5 минут, 12 секунд (16.08.2010 - 10:35) DedMorozzz написал(а):
<?php
$text='<img src="style/logo.jpg" border="0">
<img src="http://my.ru/css/1.jpg" border="0">';
$text=preg_replace('#src="(?!http|https)#','src="http://my.ru/',$text);
echo htmlspecialchars($text);//<img src="http://my.ru/style/logo.jpg" border="0"> <img src="http://my.ru/css/1.jpg" border="0">
Спустя 6 минут, 5 секунд (16.08.2010 - 10:41) Guest написал(а):
DedMorozzz
спасибо больше, можно пару вопросов теперь.
1)что означают # в начале и конце - то что по краям что-то может быть?
2)можно про эту конструкцию поподробнее ?!
какие еще конструкции бывают такого рода?
я не в первый раз с регулярками свзявыаюсь, но это для меня нечто новое)
спасибо больше, можно пару вопросов теперь.
1)что означают # в начале и конце - то что по краям что-то может быть?
2)можно про эту конструкцию поподробнее ?!
какие еще конструкции бывают такого рода?
я не в первый раз с регулярками свзявыаюсь, но это для меня нечто новое)
Спустя 3 минуты, 47 секунд (16.08.2010 - 10:45) Guest написал(а):
про ?! всмысле))
Спустя 4 минуты, 19 секунд (16.08.2010 - 10:49) DedMorozzz написал(а):
# - указатель границы регулярки. У тебя в 1м случае были слеши, но они не универсальных. Их постоянно необходимо экранировать. А шарп(решетка) экранируеться крайне редко. Так же можно использовать любые символы, буть то & или ~. Но что бы их поставить - необходимо далеко тянуться, и по сему самый оптимальный выбор - решетка.
По поводу констурукции, то всё что в квадратных скобках - это любой символ диапазона. Она здесь в ТАКОМ виде не подойдёт.
Я сделал следующим образом: указал, что после src не должно быть ПРАВЕЕ ничего, что было бы не http или https(в данном случае 2е условие было лишнее, поскольку http включаеться в https. и последняя буква не играет никакой роли.)
т.е. (?!) - отрицательный(негативный) просмотр вперёд. Если находиться шаблон, который удовлетворяет условию(т.е. после срк не хттп), тогда этот кусок заменяется на нужное нам условие. Как-то так.
По поводу констурукции, то всё что в квадратных скобках - это любой символ диапазона. Она здесь в ТАКОМ виде не подойдёт.
Я сделал следующим образом: указал, что после src не должно быть ПРАВЕЕ ничего, что было бы не http или https(в данном случае 2е условие было лишнее, поскольку http включаеться в https. и последняя буква не играет никакой роли.)
т.е. (?!) - отрицательный(негативный) просмотр вперёд. Если находиться шаблон, который удовлетворяет условию(т.е. после срк не хттп), тогда этот кусок заменяется на нужное нам условие. Как-то так.
Спустя 4 минуты, 53 секунды (16.08.2010 - 10:54) Guest написал(а):
DedMorozzz
про решетку, я даже не заметил, что границы ты убрал, ужас, невнимательный, теперь буду знать!
а про ?! ты конкретно спас, мне много где именню исключать надо было, приходилось совсем по-другому делать, большое спасибо!!
осталась одна мелочь!
ведь может быть и так src='
есть возможность добавить и это в регулярку, или придется таки то же самое еще раз написать только с апострофом?
если написать так (\"|\') то непонятно на что заменять потом)
про решетку, я даже не заметил, что границы ты убрал, ужас, невнимательный, теперь буду знать!
а про ?! ты конкретно спас, мне много где именню исключать надо было, приходилось совсем по-другому делать, большое спасибо!!
осталась одна мелочь!
ведь может быть и так src='
есть возможность добавить и это в регулярку, или придется таки то же самое еще раз написать только с апострофом?
если написать так (\"|\') то непонятно на что заменять потом)
Спустя 2 минуты, 50 секунд (16.08.2010 - 10:57) DedMorozzz написал(а):
$text=preg_replace('#src=("|\')(?!http|https)#','src=$1http://my.ru/',$text);
Сейчас смотрится какая кавычка находиться перед срк= и она же и подставляется в заменяемый участок.
Спустя 7 минут, 33 секунды (16.08.2010 - 11:05) Guest написал(а):
DedMorozzz
в регулярках очень хорошо разбираешься! еще раз спасибо!
в регулярках очень хорошо разбираешься! еще раз спасибо!
Спустя 5 минут, 24 секунды (16.08.2010 - 11:10) DedMorozzz написал(а):
Да в принципе не за что. Это достаточно простые вопросы