Новичку в регулярных выражениях
Прошу помочь на конкретном примере:
Нужно, чтобы в строке 'Привет всем! [img="pic.jpg"]' То, что в квадратных скобках заменялось на '<img src="pic.jpg" border="0">' и на выходе получалась строка 'Привет всем! <img src="pic.jpg" border=="0">' ну и соответственно выводилась пикча...
Из "самоучителей" очень тяжело разобраться самостоятельно... Прошу помочь разжевать что и как...
Пытался так:
$str='Привет всем! [img="pic.jpg"]'; // строка
if(eregi("/(\[img=\")()(\"\])/", $str, $regs)) // сверяем с паттерном
{
$out='<img src="'.$regs[2].'" border="0">'; //Формируем выход
$str=eregi_replace("/(\[img=\")()(\"\])/", $out, $str); // заменяем подстроку на выход
echo $str;
}
?>
Вытекающие просьбы и вопросы:
1. Пояснить как ПРАВИЛЬНО формировать паттерн для строки на конкретном примере.
2. Проконсультировать на предмет, если в строке 2 совпадения и как они будут обрабатываться (нужен ли foreach) (например:'Привет всем! [img="pic.jpg"] текст [img="pic2.jpg"]')
К сожалению найти пособие по составлению паттернов не очень удалось.
Заранее благодарен откликнувшимся и не пославших меня в гугл и поиск...
$str = preg_replace('#\[img="?(.*?)"?\]#','<img src="\1" border="0" />',$str);
Если не заменится, тогда замени в строке замены "\1" на "\\1" (код не проверял, а ща не вспомню 1 слэш или два надо при одинарных кавычках. Вроде как 1)
http://phpclub.ru/detail/ - вот тут статья толковая про регулярку
Хорошая книжка ! Только вот на счёт купить наверняка в книжном варианте нигде не найти :(
( по крайней мере пару месяцев назад в Киеве на Петровке нигде не было, не помню точно причину, по моему тираж закончился )
Скуплю за двойную цену :D (серьёзно :) ) ?
$str = preg_replace('#\[img="?(.*?)"?\]#','<img src="\1" border="0" />',$str);
Если не заменится, тогда замени в строке замены "\1" на "\\1" (код не проверял, а ща не вспомню 1 слэш или два надо при одинарных кавычках. Вроде как 1)
http://phpclub.ru/detail/ - вот тут статья толковая про регулярку
Камрад, большое спасибо... На самом деле работает...
Если можешь, в личку объясни кусок ?(.*?) то что из скобок уходит в переменную я в курсе... мм... что за единичные символы??? пробелы?
Остальные - флеймеры-мудаки...
недавно письмо с букс.ру пришло, мло у них эта книга появилась в продаже
## - это чтобы всё было по фен-шую
\[ - открывающая скобка
img= - текст
"? - или есть кавычка или нету кавычки
(.*?) - любой символ повторяется ноль или несколько раз (уходит в переменную). Поскольку в .* попадают символы [ и ], а в виду прожорливости регулярок, код типа [img=1.jpg] вася [img="2.jpg"] петя в переменную \1 может сунуть следующее:
, то .*? лечит как раз от такого исхода, это лекарство от жадности, если я ничего не путаю.
"? - или есть закрывающая кавычка или нету
\] закрывающая скобка
Если можешь, в личку объясни кусок ?(.*?) то что из скобок уходит в переменную я в курсе... мм... что за единичные символы??? пробелы?
а я ж говорил, купи книжку. по форумам всему не научишся. первый - ? относится к предыдущему символу и означает "один или ноль впереди идущих символов". ? после .* - это модификатор, убивающий жадность квантификаторов. .* без ? будет захватывать ВСЕ символы до последнего " в тексте. с ? - до первого ".
Остальные - флеймеры-мудаки...
юноша, мой тебе дружеский совет - на форуме вести себя так же, как в жизни. ибо я сомневаюсь, что ты так смело сказал бы мне это в лицо ;)
вопрос "нафига вот такой вопросительный знак" я задаю на собеседованиях каждому кандидату... отвечают - единицы. так что вы не про совесть автора подумайте, а почитайте на досуге про жадность квантификаторов.
Я не кандидат на собеседовании, я вообще инженер-радиотехник, а регулярки учил по кратенькому мануальчику и по хелпам php потому что было интересно.
хехе - я все сохранил для потомков в своей цитате ;)
я вообще инженер-радиотехник, а регулярки учил по кратенькому мануальчику и по хелпам php потому что было интересно.
да я тоже, как бы.. инженер по электросвязи ;)
а насчет - как и по чем учил - то ради Бога, это только приветствовать можно - расширение кругозора, как никак. но советовать-то надо проверенные вещи ;)
\[ - открывающая скобка
img= - текст
"? - или есть кавычка или нету кавычки
(.*?) - любой символ повторяется ноль или несколько раз (уходит в переменную). Поскольку в .* попадают символы [ и ], а в виду прожорливости регулярок, код типа [img=1.jpg] вася [img="2.jpg"] петя в переменную \1 может сунуть следующее: , то .*? лечит как раз от такого исхода, это лекарство от жадности, если я ничего не путаю.
"? - или есть закрывающая кавычка или нету
\] закрывающая скобка
ВОТ ЗА ЭТО тебе огромное спасибо... т.е. ? указывает на то что есть или один такой символ, или нету вообще... G? означает что или стоит символ G или его нету...?? так?
да. именно так.
Данке шон...
Просто пишу модуль загрузки файлов на сервер.. ну и чтоб с ними потом можно было работать как с ББ-кодом...
Осталось только разобраться с конструкциями text чтобы подобные последовательности не обрабатывались.. Это наверное нужно сверять с массивами на запрет закрытия тега?