[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: помогите составить регулярку, плиз
Гость_alex
$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)можно про эту конструкцию поподробнее ?!
какие еще конструкции бывают такого рода?

я не в первый раз с регулярками свзявыаюсь, но это для меня нечто новое)

Спустя 3 минуты, 47 секунд (16.08.2010 - 10:45) Guest написал(а):
про ?! всмысле))

Спустя 4 минуты, 19 секунд (16.08.2010 - 10:49) DedMorozzz написал(а):
# - указатель границы регулярки. У тебя в 1м случае были слеши, но они не универсальных. Их постоянно необходимо экранировать. А шарп(решетка) экранируеться крайне редко. Так же можно использовать любые символы, буть то & или ~. Но что бы их поставить - необходимо далеко тянуться, и по сему самый оптимальный выбор - решетка.

По поводу констурукции, то всё что в квадратных скобках - это любой символ диапазона. Она здесь в ТАКОМ виде не подойдёт.
Я сделал следующим образом: указал, что после src не должно быть ПРАВЕЕ ничего, что было бы не http или https(в данном случае 2е условие было лишнее, поскольку http включаеться в https. и последняя буква не играет никакой роли.)
т.е. (?!) - отрицательный(негативный) просмотр вперёд. Если находиться шаблон, который удовлетворяет условию(т.е. после срк не хттп), тогда этот кусок заменяется на нужное нам условие. Как-то так.

Спустя 4 минуты, 53 секунды (16.08.2010 - 10:54) Guest написал(а):
DedMorozzz
про решетку, я даже не заметил, что границы ты убрал, ужас, невнимательный, теперь буду знать!

а про ?! ты конкретно спас, мне много где именню исключать надо было, приходилось совсем по-другому делать, большое спасибо!!

осталась одна мелочь!
ведь может быть и так 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 написал(а):
Да в принципе не за что. Это достаточно простые вопросы wink.gif
Быстрый ответ:

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