[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с регулярными выражниями
kodemak
Допустим мне нужно заменить URL ссылку на профиля (в комментариях) на его имя
есть функция profile_name(); которая возвращает имя профиля по его id


$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#is","$1" ,$ret);
//выводит только id вместо ссылки


$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#is",profile_name("$1") ,$ret);
//нечего не выводит =(


надеюсь понятно в чем моя проблема, я не могу из передать функции параметр взятый из регулярки?
как это обойти?
учитывая то что у меня может быть несколько ссылок на профилей в одном комменте...



Спустя 1 день, 17 часов, 41 секунда (9.03.2011 - 10:53) gaserge написал(а):
если функция работает то так должно быть:

(сори за повтор сообщения)

Спустя 9 минут, 38 секунд (9.03.2011 - 11:03) gaserge написал(а):
$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#ise", "profile_name($1)", $ret);


вот так попробуй

Спустя 3 часа, 48 минут, 23 секунды (9.03.2011 - 14:51) kodemak написал(а):
Цитата (gaserge @ 9.03.2011 - 08:03)
$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#ise", "profile_name()", $ret);


вот так попробуй

Нет, так не выходит sad.gif
неужели это нерешаемая проблема? dry.gif

Спустя 6 минут, 4 секунды (9.03.2011 - 14:57) DedMorozzz написал(а):
$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#is",profile_name('$1') ,$ret);

кавычки одинарные

Пример:
$a = "zz 22";
$a = preg_replace("(22)",base64_encode('$1'),$a);
echo $a;//zz JDE=

Спустя 1 час, 28 минут, 18 секунд (9.03.2011 - 16:26) kodemak написал(а):
столкнулся еще с одной проблемой, я получаю текстовую переменную а функция profile_name(); работает только с цифровыми, как мне получить из текстовой цифровую переменную?

Спустя 3 минуты, 6 секунд (9.03.2011 - 16:29) gaserge написал(а):
intval()

Спустя 29 минут, 9 секунд (9.03.2011 - 16:58) kodemak написал(а):
все предельно четко и понятно, но почему - то не работает =(
я для проверки все убрал и создал новую функцию


function username($userid){
return intval($userid);//не работает выводит - 0
return intval('2')*2;//выводит 4
return $userid;//выводит но нужно цифровую пременную =(
return $userid;//тоже выводит 0
}

$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#is",username('$1'),$ret);//id

Спустя 1 час, 20 минут, 57 секунд (9.03.2011 - 18:19) gaserge написал(а):
$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#ise", "username('$1')",$ret); //id


- так у меня работает.

DedMorozzz,
я конечно новичек в пхп, но вроде модификатор e - запускает выполнения кода username($1) - который нужно обносить ковычками.

Спустя 17 минут, 14 секунд (9.03.2011 - 18:36) inpost написал(а):
kodemak
username('$1') - правильно, ты текст передаёшь, а не переменную! Переменную передают так: username($1)

Спустя 2 часа, 15 минут, 43 секунды (9.03.2011 - 20:52) kodemak написал(а):
С этим все понятно, но я не могу просто так запустить, мою функцию так как я передаю в нее не переменную а текст, intval(); превращает мой текстовый id в ноль

Спустя 1 час, 3 минуты, 23 секунды (9.03.2011 - 21:55) gaserge написал(а):
у меня все работает.

Спустя 18 часов, 18 минут, 45 секунд (10.03.2011 - 16:14) kodemak написал(а):
<?php 
function
name($id){
return " (".intval($id)." / ".$id.") ";
}
$text = "text http://192.168.0.102/profile.php?id=2 text http://192.168.0.102/profile.php?id=3 text";
$text = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#is",name('$1'),$text);
echo $text;// text (0 / 2) text (0 / 3) text
?>

выводит text (0 / 2) text (0 / 3) text
а должно выводить text (2 / 2) text (2 / 3) text
почему не так?

Спустя 4 минуты, 57 секунд (10.03.2011 - 16:19) Trianon написал(а):
Что-то не так у Вас там явно.

function name($id){
return " (".intval($id)." / ". bin2hex($id).") ";
}

поглядите, что такая покажет.

Спустя 41 минута, 56 секунд (10.03.2011 - 17:01) kodemak написал(а):
text (0 / 2431) text (0 / 2431) text =(

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

Спустя 4 часа, 36 минут, 16 секунд (10.03.2011 - 21:37) gaserge написал(а):
еклмн, ты мой код пробовал?

function username($userid){
return intval($userid)*2;
}

$ret = "http://192.168.0.102/profile.php?id=123456";
$ret = preg_replace("#http:\/\/192\.168\.0\.102\/profile\.php\?id=(.*?)(\s|&|\/|$)#ise", "username('$1')",$ret);//id

echo $ret;


все работает
Быстрый ответ:

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