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

  • Автор темы Автор темы Sintex
  • Дата начала Дата начала

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
Помогите сделать так, чтобы функция работала с тем значением, которое я вырезал?
 
Других способов нету?

-~{}~ 30.03.07 14:16:

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

-~{}~ 30.03.07 14:18:

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

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

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

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

-~{}~ 30.03.07 14:26:

Фанат
\1 - это вырезанное значение из регулярки, если я не ошибаюсь )
 
Вот в этом и проблемА) Как сделать, чтобы она знала это определённое значение?
 
Ты, блин, шутки тут шутить вздумал?
Ты не знаешь, как сделать, чтобы функция увидела переменную, которую ей передали в параметрах???
 
Фанат
Блин, это я знаю. Проблема в том, что при выполнении
MyNick("\1") функции не передаётся значение, которое было вырезано регуляркой
 
Точнее передаётся, но значение превращается в квадратик: 
 
логика на грани фантастики

КОДИРОВКУ СВОЕГО ТЕКСТА ПОСМОТРИ, чудик
 
Sintex
вообще-то "\1" === chr(1), а '\1' === '\\1', но - увы - не в этом ваша главная беда.
кстати, ссылку на preg_replace_callback вам дали в первом же комментарии.
 
preg_replace("#\[n\](.*?)\[/n\]#sie", "MyNick(\"\\1\");", $text);

function MyNick($nk){
$nk=Удалить лишние слеши();
return $nk;
}
 
DiMA
sorry, вы можете объяснить, зачем использовать eval для каждого (sic!) вхождения, учитывая при этом ещё чудеса с одинарными кавычками - вместо наиболее логичной и симпатичной preg_replace_callback?..
 
могу
обычно я помещаю код во второй аргумент, итого выходит одна строка кода и одна команда
 
ну, тут-то у человека уже есть функция.
в общем же случае для приверженцев лаконичности/запутанности есть create_function - тоже eval, но хоть один, а не для каждого совпадения.
 
DiMA
Большое спасибо )

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