Доброе время суток.
Сразу к теме: я пытался сделать регулярку для обработки смайлов но при некоторых ситуациях не так все работает - ниже приведу примеры - плз ХЭЛП !
Пример кода
Вот тут и проблема - 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.
И все равно - ноль на массу.
Спустя 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, зови, заценим - не вопрос
Спустя 2 минуты, 28 секунд (19.06.2009 - 19:08) kirik написал(а):
Цитата (anonymouse @ 19.06.2009 - 11:02) |
осталось понять как сделать ББ коды кнопки так чтоб они срабатывали там где клик и при выделен ом тексте |
Посмотри на этом форуме как реализовано, перепиши чутка

Цитата (glock18 @ 19.06.2009 - 11:05) |
anonymouse, зови, заценим - не вопрос |
++
Спустя 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() а не стр. ХЗ ! Что увидел в нэте первым то и начал юзать.
_____________