|
|
|
| Добрый день.
$this->cookie=preg_replace("#(numdoc%3A)50#i", "\$150", $this->cookie);
Внимание обратить нужно сюда "\$150" должно(хотелось бы) получится numdoc%3A50 а получается пустота =) т.к. нету $150 сделал так \$1\50 сует всякие знаки из таблицы ascii.
Собственно сабаж, не знаю как быть. Что сунуть между $1 и 50 чтобы это самое отделило их но не записывалось в результат?
Спасибо. | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: 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) | |
|
|
|
|
|
|
|
для: ntro123
(22.04.2011 в 20:02)
| | Если я правильно все понял, то лучше поступить примерно так
<?php
$text = "numdoc%3A50 заменить на \$150 - не получается";
$text = preg_replace("#(numdoc%3A)(50)#i", "\\1\\2", $text);
echo $text;
?>
|
| |
|
|
|
|
|
|
|
для: 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, то все правильно НО пробел потом придется убирать, не рационально получается. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: cheops
(22.04.2011 в 20:30)
| | да до этого я додумался, но не очень красиво.
А можно поподробней про модификатор е? | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(23.04.2011 в 08:51)
| | Вот. Спасибо большое) | |
|
|
|