Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Новичку в регулярных выражениях

369
23 сентября 2008 года
Kesano
451 / / 09.10.2007
Решил, что пора писать что-то более серьёзное, эмулировать ББ-коды и т.д. Нужно изучить и понять регулярные выражения...

Прошу помочь на конкретном примере:
Нужно, чтобы в строке 'Привет всем! [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"]')

К сожалению найти пособие по составлению паттернов не очень удалось.

Заранее благодарен откликнувшимся и не пославших меня в гугл и поиск...
244
23 сентября 2008 года
UAS
2.0K / / 19.07.2006
Оооо боже. Эт че за убожеский учебник, в котором ещё eregi юзается.. Вот код для замены:

 
Код:
$str ="";твоя строка
$str = preg_replace('#\[img="?(.*?)"?\]#','<img src="\1" border="0" />',$str);


Если не заменится, тогда замени в строке замены "\1" на "\\1" (код не проверял, а ща не вспомню 1 слэш или два надо при одинарных кавычках. Вроде как 1)

http://phpclub.ru/detail/ - вот тут статья толковая про регулярку
2
23 сентября 2008 года
squirL
5.6K / / 13.08.2003
купите себе книжку Фриделя "Регулярные выражения" и читайте до посинения. тогда начнете ПОНИМАТЬ, что это такое.
4.7K
23 сентября 2008 года
bobik02
140 / / 11.09.2007
Цитата: squirL
купите себе книжку Фриделя "Регулярные выражения" и читайте до посинения. тогда начнете ПОНИМАТЬ, что это такое.


Хорошая книжка ! Только вот на счёт купить наверняка в книжном варианте нигде не найти :(
( по крайней мере пару месяцев назад в Киеве на Петровке нигде не было, не помню точно причину, по моему тираж закончился )

2
23 сентября 2008 года
squirL
5.6K / / 13.08.2003
ну не знаю... я в бумаге купил. правда в Одессе :)
4.7K
23 сентября 2008 года
bobik02
140 / / 11.09.2007
Цитата: squirL
ну не знаю... я в бумаге купил. правда в Одессе :)


Скуплю за двойную цену :D (серьёзно :) ) ?

369
23 сентября 2008 года
Kesano
451 / / 09.10.2007
Цитата: UAS
Оооо боже. Эт че за убожеский учебник, в котором ещё eregi юзается.. Вот код для замены:

 
Код:
$str ="";твоя строка
$str = preg_replace('#\[img="?(.*?)"?\]#','<img src="\1" border="0" />',$str);


Если не заменится, тогда замени в строке замены "\1" на "\\1" (код не проверял, а ща не вспомню 1 слэш или два надо при одинарных кавычках. Вроде как 1)

http://phpclub.ru/detail/ - вот тут статья толковая про регулярку



Камрад, большое спасибо... На самом деле работает...
Если можешь, в личку объясни кусок ?(.*?) то что из скобок уходит в переменную я в курсе... мм... что за единичные символы??? пробелы?
Остальные - флеймеры-мудаки...

6
23 сентября 2008 года
George
4.1K / / 05.01.2007
Цитата: bobik02
Скуплю за двойную цену :D (серьёзно :) ) ?


недавно письмо с букс.ру пришло, мло у них эта книга появилась в продаже

366
23 сентября 2008 года
int
668 / / 30.03.2005
Цитата:
#\[img="?(.*?)"?\]#


## - это чтобы всё было по фен-шую
\[ - открывающая скобка
img= - текст
"? - или есть кавычка или нету кавычки
(.*?) - любой символ повторяется ноль или несколько раз (уходит в переменную). Поскольку в .* попадают символы [ и ], а в виду прожорливости регулярок, код типа [img=1.jpg] вася [img="2.jpg"] петя в переменную \1 может сунуть следующее:

Цитата:
1.jpg] вася [img="2.jpg"

, то .*? лечит как раз от такого исхода, это лекарство от жадности, если я ничего не путаю.
"? - или есть закрывающая кавычка или нету
\] закрывающая скобка

2
23 сентября 2008 года
squirL
5.6K / / 13.08.2003
Цитата: Kesano
.
Если можешь, в личку объясни кусок ?(.*?) то что из скобок уходит в переменную я в курсе... мм... что за единичные символы??? пробелы?



а я ж говорил, купи книжку. по форумам всему не научишся. первый - ? относится к предыдущему символу и означает "один или ноль впереди идущих символов". ? после .* - это модификатор, убивающий жадность квантификаторов. .* без ? будет захватывать ВСЕ символы до последнего " в тексте. с ? - до первого ".

Цитата: Kesano

Остальные - флеймеры-мудаки...


юноша, мой тебе дружеский совет - на форуме вести себя так же, как в жизни. ибо я сомневаюсь, что ты так смело сказал бы мне это в лицо ;)

2
23 сентября 2008 года
squirL
5.6K / / 13.08.2003
Цитата: int
вопросительный знак? o_O Оставим на совести автора), уходит в переменную


вопрос "нафига вот такой вопросительный знак" я задаю на собеседованиях каждому кандидату... отвечают - единицы. так что вы не про совесть автора подумайте, а почитайте на досуге про жадность квантификаторов.

366
23 сентября 2008 года
int
668 / / 30.03.2005
squirL, успыкойся, я уже отредактировал :)) Просто не сразу вспомнил.
Я не кандидат на собеседовании, я вообще инженер-радиотехник, а регулярки учил по кратенькому мануальчику и по хелпам php потому что было интересно.
2
23 сентября 2008 года
squirL
5.6K / / 13.08.2003
Цитата: int
squirL, успыкойся, я уже отредактировал :))


хехе - я все сохранил для потомков в своей цитате ;)

Цитата: int

я вообще инженер-радиотехник, а регулярки учил по кратенькому мануальчику и по хелпам php потому что было интересно.


да я тоже, как бы.. инженер по электросвязи ;)
а насчет - как и по чем учил - то ради Бога, это только приветствовать можно - расширение кругозора, как никак. но советовать-то надо проверенные вещи ;)

366
23 сентября 2008 года
int
668 / / 30.03.2005
Когда я хотел утром посоветовать, за меня уже посоветовали, а тут я только расшифровать пытался.
369
23 сентября 2008 года
Kesano
451 / / 09.10.2007
Цитата: int
## - это чтобы всё было по фен-шую
\[ - открывающая скобка
img= - текст
"? - или есть кавычка или нету кавычки
(.*?) - любой символ повторяется ноль или несколько раз (уходит в переменную). Поскольку в .* попадают символы [ и ], а в виду прожорливости регулярок, код типа [img=1.jpg] вася [img="2.jpg"] петя в переменную \1 может сунуть следующее: , то .*? лечит как раз от такого исхода, это лекарство от жадности, если я ничего не путаю.
"? - или есть закрывающая кавычка или нету
\] закрывающая скобка



ВОТ ЗА ЭТО тебе огромное спасибо... т.е. ? указывает на то что есть или один такой символ, или нету вообще... G? означает что или стоит символ G или его нету...?? так?

2
23 сентября 2008 года
squirL
5.6K / / 13.08.2003
Цитата: Kesano
G? означает что или стоит символ G или его нету...?? так?


да. именно так.

369
23 сентября 2008 года
Kesano
451 / / 09.10.2007
Цитата: squirL
да. именно так.



Данке шон...

Просто пишу модуль загрузки файлов на сервер.. ну и чтоб с ними потом можно было работать как с ББ-кодом...

Осталось только разобраться с конструкциями text чтобы подобные последовательности не обрабатывались.. Это наверное нужно сверять с массивами на запрет закрытия тега?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог