Как из регулярки можно выполнить функцию?

Sintex

Новичок
Как из регулярки можно выполнить функцию?

Вопрос такой:

Есть регулярка, которая вырезает текст из [n][/n]

preg_replace('#\[n\](.*?)\[/n\]#si', '\1', $text);

Есть функция:

function MyNick($nk){
if($R != '\1'){
$R="ok"
} else {
$R=$nk;
}
return $R;
}

Теперь когда я делаю

preg_replace('#\[n\](.*?)\[/n\]#si', MyNick('\1'), $text);
Функция работает не с тем, что я вырезал, а с \1
Помогите сделать так, чтобы функция работала с тем значением, которое я вырезал?
 

Sintex

Новичок
Других способов нету?

-~{}~ 30.03.07 14:16:

AHTIXPICT
А где можно почитать и как это можно использовать в данном случае?

-~{}~ 30.03.07 14:18:

Просбела в том, когда я ставлю " вместо ' То в результате получаються вот такие квадратики: 
 

Sintex

Новичок
В общем вот что получилось:

$text = preg_replace('#\[n\](.*?)\[/n\]#si', MyNick("\1"), $text);

function MyNick($nk){
return $nk;
}

После этого вместо вырезанных значений вставляються квадратики (

-~{}~ 30.03.07 14:26:

Фанат
\1 - это вырезанное значение из регулярки, если я не ошибаюсь )
 

Sintex

Новичок
Вот в этом и проблемА) Как сделать, чтобы она знала это определённое значение?
 

Фанат

oncle terrible
Команда форума
Ты, блин, шутки тут шутить вздумал?
Ты не знаешь, как сделать, чтобы функция увидела переменную, которую ей передали в параметрах???
 

Sintex

Новичок
Фанат
Блин, это я знаю. Проблема в том, что при выполнении
MyNick("\1") функции не передаётся значение, которое было вырезано регуляркой
 

Sintex

Новичок
Точнее передаётся, но значение превращается в квадратик: 
 

Фанат

oncle terrible
Команда форума
логика на грани фантастики

КОДИРОВКУ СВОЕГО ТЕКСТА ПОСМОТРИ, чудик
 

hermit_refined

Отшельник
Sintex
вообще-то "\1" === chr(1), а '\1' === '\\1', но - увы - не в этом ваша главная беда.
кстати, ссылку на preg_replace_callback вам дали в первом же комментарии.
 

DiMA

php.spb.ru
Команда форума
preg_replace("#\[n\](.*?)\[/n\]#sie", "MyNick(\"\\1\");", $text);

function MyNick($nk){
$nk=Удалить лишние слеши();
return $nk;
}
 

hermit_refined

Отшельник
DiMA
sorry, вы можете объяснить, зачем использовать eval для каждого (sic!) вхождения, учитывая при этом ещё чудеса с одинарными кавычками - вместо наиболее логичной и симпатичной preg_replace_callback?..
 

DiMA

php.spb.ru
Команда форума
могу
обычно я помещаю код во второй аргумент, итого выходит одна строка кода и одна команда
 

hermit_refined

Отшельник
ну, тут-то у человека уже есть функция.
в общем же случае для приверженцев лаконичности/запутанности есть create_function - тоже eval, но хоть один, а не для каждого совпадения.
 

Sintex

Новичок
DiMA
Большое спасибо )

И спасибо всем кто пытался помочь( Сорь, если задавал тупые вопросы (
 
Сверху