Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена смайлика вне ббкода
 
 автор: Fuelen   (22.03.2010 в 21:46)   письмо автору
 
 

Мне нужно сделать замену смайлика вне ббкода. Как сделать правильно?
Пробовал вот так
$text = preg_replace('#(?<!\[php\]|\[code\]).*(;-\)|;\)).*(?!\[/php\]|\[/code\])#uUs', '<img src="http://'.$_SERVER['SERVER_NAME'].'/smiles/default/1.png" alt="smile"/>', $text, -1, $count);
но заменяется весь текст до и после смайлика. Как сделать, чтобы .* не заменялось?

  Ответить  
 
 автор: imustang   (23.03.2010 в 02:33)   письмо автору
 
   для: Fuelen   (22.03.2010 в 21:46)
 

я один не понял о чем тут речь ?

  Ответить  
 
 автор: Fuelen   (23.03.2010 в 08:01)   письмо автору
 
   для: imustang   (23.03.2010 в 02:33)
 

Например есть текст
:) [php] бла-бла-бла :) бла-бла-бла[/php]
Вот тот смайлик, что не между тегами [php] и [/php] надо заменить на картинку.
Если заменяю кодом, что выше, то остается только тот перый смайл, а текст дальше удаляется. Как сделать, чтобы он не удалялся? Так понятнее? :)

  Ответить  
 
 автор: Тень&   (23.03.2010 в 16:58)   письмо автору
 
   для: Fuelen   (23.03.2010 в 08:01)
 

Вариант #1 Не использовать регулярные выражения. См. xBB

Вариант # 2 Разбить весь текст с помощью preg_split():
<?php
print_r
(preg_split('/(\\[.+?\\])/'":) [php] бла-бла-бла :) бла-бла-бла[/php]", -1PREG_SPLIT_DELIM_CAPTURE));

Тогда под чётными индексами массива всегда будет текст, а под нечётными -- теги. Дальше думать.

А все варианты с preg_replace() сосут.

  Ответить  
 
 автор: Fuelen   (23.03.2010 в 18:45)   письмо автору
 
   для: Тень&   (23.03.2010 в 16:58)
 

Спасибо))

  Ответить  
 
 автор: Trianon   (23.03.2010 в 22:32)   письмо автору
 
   для: Тень&   (23.03.2010 в 16:58)
 

_r(preg_split('/(\\[.+?\\])/', ":) [php] бла-бла-бла :) бла-бла-бла[/php]", -1, PREG_SPLIT_DELIM_CAPTURE));

>Тогда под чётными индексами массива всегда будет текст, а под нечётными -- теги.

пока кто-нибудь не напишет вложенные бб-теги.

>Дальше думать.

О да.

  Ответить  
 
 автор: Trianon   (23.03.2010 в 22:48)   письмо автору
 
   для: Trianon   (23.03.2010 в 22:32)
 

Игорь Вячеславович, гляньте на досуге на исходник поста (23.03.2010 в 22:32), пожалуйста.
Сдается мне, что там что-то не так рендерится. Тег [code] я не открывал. Как бы дыры какой не вышло...

  Ответить  
 
 автор: cheops   (24.03.2010 в 01:16)   письмо автору
 
   для: Trianon   (23.03.2010 в 22:48)
 

Да, не не должно - просто вычленение идет не по регулярным выражениям - срабатывает 0 по умолчанию - это всегда будет если имеется один закрывающий блок [ /code].

  Ответить  
 
 автор: Тень&   (24.03.2010 в 18:11)   письмо автору
 
   для: Trianon   (23.03.2010 в 22:32)
 

> пока кто-нибудь не напишет вложенные бб-теги.

Поясните

  Ответить  
 
 автор: Trianon   (24.03.2010 в 21:16)   письмо автору
 
   для: Тень&   (24.03.2010 в 18:11)
 

ну фиг знает. Мало ли у кого какая фантазия...
[quote] ... [php] .... [/php] .... [/quote]

  Ответить  
 
 автор: Тень&&&   (24.03.2010 в 21:41)
 
   для: Trianon   (24.03.2010 в 21:16)
 

Ну и? Не понимаю смысл "фырка", как Вы сами любите говорить. preg_split() тут выполняет роль tokenizer'а, а уже дальше формируем сообщение в соответствии со своими требованиями.

  Ответить  
 
 автор: Trianon   (24.03.2010 в 21:45)   письмо автору
 
   для: Тень&&&   (24.03.2010 в 21:41)
 

Я обычно выделяю мысль, на которую обращаю внимание:
>Тогда под чётными индексами массива всегда будет текст, а под нечётными -- теги.

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

  Ответить  
 
 автор: Тень&&   (24.03.2010 в 21:58)
 
   для: Trianon   (24.03.2010 в 21:45)
 

Вы проверяли?

  Ответить  
 
 автор: Trianon   (24.03.2010 в 22:09)   письмо автору
 
   для: Тень&&   (24.03.2010 в 21:58)
 

Нет.
Действительно, не заметил PREG_SPLIT_DELIM_CAPTURE .

  Ответить  
 
 автор: big-trot   (24.03.2010 в 18:59)   письмо автору
 
   для: Fuelen   (23.03.2010 в 08:01)
 

(?=\[php\])(?:(?!\[\/php\]).)*(:\))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования