Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: (numdoc%3A)50 заменить на \$150 - не получается
 
 автор: ntro123   (22.04.2011 в 19:43)   письмо автору
 
 

Добрый день.

$this->cookie=preg_replace("#(numdoc%3A)50#i", "\$150", $this->cookie);

Внимание обратить нужно сюда "\$150" должно(хотелось бы) получится numdoc%3A50 а получается пустота =) т.к. нету $150 сделал так \$1\50 сует всякие знаки из таблицы ascii.

Собственно сабаж, не знаю как быть. Что сунуть между $1 и 50 чтобы это самое отделило их но не записывалось в результат?

Спасибо.

  Ответить  
 
 автор: cheops   (22.04.2011 в 19:57)   письмо автору
 
   для: ntro123   (22.04.2011 в 19:43)
 

Тут есть парочка особенностей, во-первых круглые скобки в регулярных выражениях являются спец-символами, поэтому их нужно экранировать, во-вторых $150 в замене является ссылкой на 150 скобку, чтобы экранирование сработало, лучше используйте одиночные кавычки
<?php
  $text 
"(numdoc%3A)50 заменить на \$150 - не получается";
  
$text preg_replace("#\(numdoc%3A\)50#i"'\$150'$text);
  echo 
$text;
?>

  Ответить  
 
 автор: ntro123   (22.04.2011 в 20:02)   письмо автору
 
   для: cheops   (22.04.2011 в 19:57)
 

Нет, нет. вы не поняли.

я специально упростил пример и засунул туда уже готовое.

preg_replace("#(numdoc%3A)50#i", "\$150", $this->cookie);

т.е. найти numdoc%3A (но вообще тут может быть и маска) после этого идет 2 значная цирфа (но тут про100 решил для простоты примера написать 50)

и это надо заменить на сам шаблон т.е. numdoc%3A и приписать 50(но вообще там стоит переменная которая имеет значение от 1 до 50, решил пусть будет 50)

  Ответить  
 
 автор: cheops   (22.04.2011 в 20:09)   письмо автору
 
   для: ntro123   (22.04.2011 в 20:02)
 

Если я правильно все понял, то лучше поступить примерно так
<?php
  $text 
"numdoc%3A50 заменить на \$150 - не получается";
  
$text preg_replace("#(numdoc%3A)(50)#i""\\1\\2"$text);
  echo 
$text;
?>

  Ответить  
 
 автор: ntro123   (22.04.2011 в 20:16)   письмо автору
 
   для: cheops   (22.04.2011 в 20:09)
 

скорее вот так:


<? $nomer=rand(0,50);
 
$text "numdoc%3A50 заменить на \$150 - не получается"
  
$text preg_replace("#(numdoc%3A)[0-9]{0,2}#i""\\1".$nomer$text); 
  echo 
$text;

?>

НО выводит 1. Не то что нужно. А если поставить пробел между т.е. было "\\1".$nomer, стало "\\1 ".$nomer, то все правильно НО пробел потом придется убирать, не рационально получается.

  Ответить  
 
 автор: cheops   (22.04.2011 в 20:30)   письмо автору
 
   для: ntro123   (22.04.2011 в 20:16)
 

Да, какие-то внутрибиблиотечные заморочки, можно обойти эту ситуацию следующим образом
<?php
  $text 
"numdoc%3A50 заменить на \$150 - не получается";  
  
$text preg_replace_callback("#(numdoc%3A)[0-9]{0,2}#i""replace"$text);  
  echo 
$text;

  function 
replace($match)
  {
    
$nomer rand(0,50); 
    return 
$match[1].$nomer;
  }
?>
PS Если отдельная функция ну никак не годится, можно обойти ситуацию через модификатор e.

  Ответить  
 
 автор: ntro123   (22.04.2011 в 20:53)   письмо автору
 
   для: cheops   (22.04.2011 в 20:30)
 

да до этого я додумался, но не очень красиво.

А можно поподробней про модификатор е?

  Ответить  
 
 автор: cheops   (22.04.2011 в 22:59)   письмо автору
 
   для: ntro123   (22.04.2011 в 20:53)
 

Примерно так, во втором параметре следует писать PHP-код (только без <?php, echo и ?>)
<?php 
  $nomer 
rand(0,50);  
  
$text "numdoc%3A50 заменить на \$150 - не получается";   
  
$text preg_replace("#(numdoc%3A)[0-9]{0,2}#ie""'\$1' . '$nomer'"$text);   
  echo 
$text
?>

  Ответить  
 
 автор: cheops   (23.04.2011 в 08:51)   письмо автору
 
   для: ntro123   (22.04.2011 в 20:16)
 

Вообще без всяких ухищрений задачу можно решить следующим образом
<?php
  $nomer
=rand(0,50); 
  
$text "numdoc%3A50 заменить на \$150 - не получается";  
  
$text preg_replace("#(numdoc%3A)[0-9]{0,2}#i""\${1}$nomer"$text);  
  echo 
$text
?>

  Ответить  
 
 автор: ntro123   (23.04.2011 в 10:33)   письмо автору
 
   для: cheops   (23.04.2011 в 08:51)
 

Вот. Спасибо большое)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования