[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ereg_replace
anonymouse
Доброе время суток.

Сразу к теме: я пытался сделать регулярку для обработки смайлов но при некоторых ситуациях не так все работает - ниже приведу примеры - плз ХЭЛП !

Пример кода
PHP
$text=preg_replace("/:D/","<img src=\"/smile1.GIF\">",$text);
$text=preg_replace("/<:D>/","<img src=\"/smile2.GIF\">",$text);


Вот тут и проблема - 2ой смайл он всегда видет как первый и так с многими.
У меня набор символов такой:

:"> :-* #:-S ^#(^ /:) (:| =P~


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


П.С. простите ребят - я бы конечно поставил другие имена но к сожалению не могу. =( Такая задача ХЭЛП !



Спустя 8 минут, 25 секунд (19.06.2009 - 18:42) kirik написал(а):
Цитата (anonymouse @ 19.06.2009 - 10:34)
Вот тут и проблема - 2ой смайл он всегда видет как первый и так с многими.

Что-то не понял.. Приведи 3 примера: исходный текст, отпарсенный не правильно, желаемый результат.

Спустя 3 минуты, 11 секунд (19.06.2009 - 18:45) anonymouse написал(а):
К примеру я писал так
Цитата
Всем привет >:D<



Но парсер срабатывал как
Цитата
:D

ну и конечно уже не тот линк на смайл вставлял...
Он обрезал >< не видел их - или как будто видел тока тот текст что раньше в строке парса - хотя я меня их местами чтоб сначало парсил на >:D< а потом на :D.

И все равно - ноль на массу.

Спустя 3 минуты, 22 секунды (19.06.2009 - 18:49) glock18 написал(а):
Цитата
Вот тут и проблема - 2ой смайл он всегда видет как первый и так с многими.


Нужно поменять их местами.

То есть, сначала заменять более сложные выражения - самые большие, не входят ни в какие другие. Затем самые сложные из оставшихся и т.д. Пока не дойдешь до самых простых и не заменишь их.

Пример простой:
PHP
$text=preg_replace("/<8:D>>/","<img src=\"/smile2.GIF\">",$text);
$text=preg_replace("/<<:D>>/","<img src=\"/smile2.GIF\">",$text);
$text=preg_replace("/<:D>/","<img src=\"/smile2.GIF\">",$text);
$text=preg_replace("/:D/","<img src=\"/smile1.GIF\">",$text);


1 и 2 примерно одной сложности и ни один из них не входит в другой -> можно в любом порядке их заменять.

Спустя 2 минуты, 54 секунды (19.06.2009 - 18:51) kirik написал(а):
Цитата (anonymouse @ 19.06.2009 - 10:45)
хотя я меня их местами чтоб сначало парсил на >:D< а потом на : D.

И все равно - ноль на массу.


Что не так?
PHP
$text = 'привет! <:D> есть тут?';
$text=preg_replace("/<:D>/","2",$text);
$text=preg_replace("/:D/","1",$text);

echo $text;

Спустя 2 минуты, 22 секунды (19.06.2009 - 18:54) kirik написал(а):
Кстати preg_replace умеет работать с массивами:
PHP
$smiles = array(
    
'/<:D>/' => '2',
    
'/:D/' => '1'
);

$text 'привет! <:D> есть тут?';
$text preg_replace(array_keys($smiles), array_values($smiles), $text);

echo 
$text;

Спустя 8 минут, 21 секунда (19.06.2009 - 19:02) anonymouse написал(а):
Вот я .... дурик... у меня там была кое какая ошибка - и я её не замечал -
простите ребят -


Kirik - спс тебе !!!

glock18

И вам спс.


П.С. осталось понять как сделать ББ коды кнопки так чтоб они срабатывали там где клик и при выделен ом тексте

Спустя 1 минута, 38 секунд (19.06.2009 - 19:04) anonymouse написал(а):
П.С. это я форум пишу - систему саму написал без бэ - а вот всякие такие кнопочки лажа...
Кстати буду рад вас видеть для "мелкого" тэста=)

Спустя 1 минута, 19 секунд (19.06.2009 - 19:05) glock18 написал(а):
anonymouse, зови, заценим - не вопрос wink.gif

Спустя 2 минуты, 28 секунд (19.06.2009 - 19:08) kirik написал(а):
Цитата (anonymouse @ 19.06.2009 - 11:02)
осталось понять как сделать ББ коды кнопки так чтоб они срабатывали там где клик и при выделен ом тексте

Посмотри на этом форуме как реализовано, перепиши чутка smile.gif

Цитата (glock18 @ 19.06.2009 - 11:05)
anonymouse, зови, заценим - не вопрос

++ smile.gif

Спустя 13 минут, 2 секунды (19.06.2009 - 19:21) anonymouse написал(а):
Или у меня мой едитор глючит или у меня мозг глючит

PHP
function bbcode_smiles($text)
    {    //echo $text;
        
        $smiles 
= array(
            '/>:D</' => '<img src=\"smiles/6.GIF\">',
            '/:D/' => '<img src="smiles/2.GIF">',
            '/:)/' => '<img src="smiles/1.GIF">',
            '/:(/' => '<img src="smiles/2.GIF">',
            '/;)/' => '<img src="smiles/3.GIF">');
         $text=preg_replace(array_keys($smiles),array_values($smiles),$text);
          
          
      return $text
;
    
    
}


Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 1 in

Спустя 1 минута, 39 секунд (19.06.2009 - 19:22) kirik написал(а):
anonymouse
Круглые скобки нужно экранировать, они в паттернах используются.

PS вот. Все метасимволы нужно экранировать.

Спустя 4 минуты, 58 секунд (19.06.2009 - 19:27) anonymouse написал(а):
Блин точно - главное сегодня читал про них и делал как надо и тут так туплю...
Сорри уже голова кругом - простите!

Спустя 1 час, 20 минут, 41 секунда (19.06.2009 - 20:48) twin написал(а):
А можно спросить, зачем preg_replace()?
C массивами прекрасно работает str_replace(); Там вообще голову не нужно греть, и работает намного быстрее. А вот этот смайлик '/;)/' вообще любопытная вещь. никогда не дает цикл норамльно написать.

Спустя 5 минут, 10 секунд (19.06.2009 - 20:53) kirik написал(а):
anonymouse
Соглашусь с twin, str_replace() здесь подойдет гораздо больше.

Спустя 17 часов, 6 минут, 58 секунд (20.06.2009 - 14:00) anonymouse написал(а):
twin
'/;)/' - что касается его - то с ним проблем нету главное конечно написать его так :
'/;\)/' а не '/;)/' ну и просмотреть немного структуру - так чтоб срабатывали те у кого больше символов и потом шли эти.


А че я использовал preg_replace() а не стр. ХЗ ! Что увидел в нэте первым то и начал юзать.


_____________
Быстрый ответ:

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