Ошибка REG_EPAREN

  • Автор темы Юрий 2004
  • Дата начала

Юрий 2004

Guest
Ошибка REG_EPAREN

Народ, подскажите, что делать. Ситуация такова: когда пользователь вводит " :) " (без кавычек), то помимо введенного текста ему показывается соответствующий графический смайлик. Приичем эти смайлики он может вводить не ограниченно число раз.Совсем как на этом форуме.
Для начала я решил использовать функцию ereg_replace(). Код такой:

$sm_1="";

$string = $user_text;
$find_obj = ":)";
$replace_obj = "<img src=\"01.gif\">";
$sm_1 = ereg_replace($find_obj, $replace_obj,$string);
echo "$sm_1";

если данный код закончить, т.е. больше ничего не писать, то все выполнятся на ура. Текстовой смайлик меняется на графческий. Если не считать, того, что графический смайлик выводится дважды и сообщение от пользователя тоже дважды. Почему, не могу понять. Ну, вот, а как только к нему добавить:

$a_string = $user_text;
$a_find_obj = ":(";
$a_replace_obj = "<img src=\"02.gif\">";
$sm_2 = ereg_replace($a_find_obj,$a_replace_obj,$a_string);
echo "$sm_2";

ПХП выводит ошибку:
Warning: ereg_replace() [function.ereg-replace]: REG_EPAREN и показывает № строки, где найдены ошибка -

$sm_2 = ereg_replace($a_find_obj,$a_replace_obj,$a_string);

Я нашел "понятие" REG_EPAREN - неправильные операторы групп скобок, но чего тут не правильно??? Никак не пойму. И переменные назвал по-разному, все равно :(

Если кто поможет, намекнет, огрмное спасибо
 

fixxxer

К.О.
Партнер клуба
Зачем тебе для замены обычного текста регулярные выражения, скажи пожалуйста?
str_replace
 

Юрий 2004

Guest
Спасибо, пробовал str_replace, ничего не получается :(
 

Burunduk-13

[CBT], Старожил РНРClub'a
Ты покажи, как ты пробовал использовать str_replace, так как твоя задача решаеться с помощью этой функции.
 

Lav

Guest
Юрий 2004
Попробуй вот так, например:
PHP:
$string = str_replace(':)', '<IMG src="01.gif">', $string);
$string = str_replace(':(', '<IMG src="02.gif">', $string);
 

SiMM

Новичок
Re: Ошибка REG_EPAREN

Автор оригинала: Юрий 2004
Warning: ereg_replace() [function.ereg-replace]: REG_EPAREN и показывает № строки, где найдены ошибка -

Я нашел "понятие" REG_EPAREN - неправильные операторы групп скобок, но чего тут не правильно???
Смотри на код внимательнее -
PHP:
$a_find_obj = ": (";
- а должно быть
PHP:
$a_find_obj = ':\(';
но, как тебе правильно советуют, твоя задача для str_replace - добавлю только, что в качестве параметров можно передавать массив. Я бы сделал примерно так:
PHP:
$arr=array(':-(' => '<img src=01.gif>',
           ':-)' => '<img src=02.gif>');
$sm=str_replace(array_keys($arr),$arr,$user_text);
 

Юрий 2004

Guest
Спасибо, коллеги. Действительно все получилось. Я думал использовать массив, но в последний момент передумал, а зря.

С функцией srt_replace() я химичил, все делал как по правилам синтаксиса, даже все получалось Но перед каждым графическим смайликом он (ПХП) выводил ... текствой. Круто, да?!

SiMM, как я вас понял значение переменной $a_find_obj, я должен был так сказать, "экранировать" с помощью \ ? Да, надо будет почитать функцию arrary_keys(), а то в книжках по ПХП я не встечал такую....

Народ, а что же значит REG_EPAREN, то что я вставил функцию регулярного выражения не там, где нужно ???
 

SiMM

Новичок
Автор оригинала: Юрий 2004
SiMM, как я вас понял значение переменной $a_find_obj, я должен был так сказать, "экранировать" с помощью \ ?
Спецсимволы, применяемые в регулярных выражениях, надо всегда экранировать, если они не используются как спецсимволы.
надо будет почитать функцию arrary_keys()
[m]array_keys[/m]
Народ, а что же значит REG_EPAREN, то что я вставил функцию регулярного выражения не там, где нужно ???
Ты же уже сам отвечал на этот вопрос
неправильные операторы групп скобок
- ты не соблюдал синтаксис регулярок - с синтаксической точки зрения в твоей записи не хватало закрывающей скобки, с логической - слэша.
 

Юрий 2004

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

SiMM

Новичок
Юрий 2004, здрасьте... ": (" - скобку ты открыл, парсер ожидает, что ты её закроешь - где твоя закрывашка? Парсер не обладает искусственным интеллектом и понятия не имеет о том, что ты имел в виду - у него "жёсткая" логика.
 

Юрий 2004

Guest
SiMM, все, дошло. Грамадное спасибо, за то что разъяснили :) :) :)
 
Сверху