В строке "Что-то $1, что-то $2 и что-то $3" заменить "$1" на $var[1], "$2" на $var[2] и т.д. Как это сделать? А если не "$1", а "{1}" ("Что-то {1}, что-то {2} и что-то {3}")? Заранее спасибо.
используй preg_replace_callback(), там можно вызвать внешнюю процедуру, а раз она внешняя, значит сделать можно что угодно
проблема в том, что в яс, насколько я понимаю, вычисление переменной должно произойти в любом случае до выполнения регулярки.
Братцы, а вот как решить исходную задачку при условии, что заменяемые фрагменты вообще одинаковые? Вот такая строчка: Код (Text): хрю-хрю smth. гав-гав smth. бе-бе smth. должна превратиться вот в такую: Код (Text): хрю-хрю 1 гав-гав 2 бе-бе 3 То есть, нужен тупо счётчик замен. При этом он не зависит от маски поиска. Как сие сделать?
А можно живой пример? Модификаторы 'e' и 'ee' я щас ковыряю, пока с переменным успехом Что касается функции "кол-в-зад", то тут трудность, имхо. Чтобы счётчик замен работал, эта функция должна получать его в качестве аргумента. А также должна возвращать новое значение. А функция принимает и возвращает только массив поиска/замены...
Argentum, в случае калбеков используйте или глобальную переменную или класс со свойством, где уже будет счетчик. Или preg_replace('/smth/e', '++$i;', $subj);
И? Достаточно знать, что кавычки квотятся. И что в одинарных кавычках они обратно не расквотятся. Если проблема с запоминанием таких вещей - это не значит, что затея "глючная". И уж тем более не повод кричать теперь об этом на каждом углу даже там, где вообще никаких подстановок нет.
и только ковычки? а если пофиксят? а если почитать комментарии к этой функции на "мануале"? каких подстановок? тебе в функцию вернется текст испорченый. Это повод.
какую функцию.... где ты в моем примере вообще подстановку видишь, не говоря уже о функции Что пофиксят? Это не баг. Если бы они не прогоняли подстановки через addslashes - эти подстановки вообще нельзя было бы использовать как параметры какой-то функции - любая кавычка тогда бы приводила к фаталу. Просто это нужно знать и помнить - что кавычки эскейпятся и что если ты их используешь как параметр - их нужно потом разэскейпить. Нужно просто понять как это работает, а не бросаться "лажами" и глючными затеями.
Они не вызывают addslashes() в том то и дело. Если вызывали именно ее - я бы не ругался. это написано в документации? ну и: нигде. тут есть и другие сообщения, к которым я отвечал.
В документации очень много не написано. Есть где вообще ничего не написано - и что же, не использовать? Возможно эскейпят только " и ' - какая разница то?
Это не стандартизированно, если в будущем вдруг исправят, а я буду тупо реплейсить \" в ", то придется исправлять. К тому же есть лишенное этих недостатков _callback
Что исправят?!... Что такое "стандартизировано"?! Это не баг, что бы его исправлять. Ладно, проехали, пусть для вас модификатор e будет "тупо и глючно", в конце концов от этого модификатору хуже не будет.
это значит, что если бы он прогонялся функцией addslashes(), то можно было получить исходный текст при помощи stripslashes().