![]() |
|
Модераторы: ginnie |
![]()
|
|
| tolkien |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: нет Всего: 4 |
Доброе утро! Возникла проблема с подстановкой. Операнд замены интерпретируется только один раз.
Листинг 1
Получаю вместо 15148.02 $1$2.$3 Пока нашел только такое решение. Листинг 2
Можно как нибудь явно указывать что необходима еще дополнительная интерпретация? И решить данную задачу без внесении изменений в шаблон $m2 Листинг1? P.S решение такого вида $s =~ s/$m1/$1$2.$3/ не подходит т.к шаблоны загружаются из внешнего файла. |
||||
|
|||||
| FooBar |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.2.2008 Репутация: нет Всего: 3 |
модификатор g?
хотя похоже вы не об этом.. Это сообщение отредактировал(а) FooBar - 5.5.2008, 06:46 |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: нет Всего: 50 |
||||
|
||||
| sir_nuf_nuf |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 1 Всего: 31 |
можно.
Для того что бы ссылаться на строки, захваченые в () ВНУТРИ регулярного выражения нужно использовать не $1 $2 а \1 \2 пример
результат
в вашем случае:
|
||||||
|
|||||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: нет Всего: 50 |
Это сообщение отредактировал(а) amg - 5.5.2008, 08:42 |
|||
|
||||
| tolkien |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: нет Всего: 4 |
FooBar
Точно модификатор /g здесь не в теме sir_nuf_nuf Замена $1 на \1 не решает проблему. Ничего не меняется. amg Спасибо работает. |
|||
|
||||
| amg |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: нет Всего: 50 |
Другой вопрос - автоматическое определение вида заменяющей части. Например
|
||||
|
|||||
| AlexPet |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 5.12.2007 Где: Брянск Репутация: нет Всего: 1 |
amg, мне кажется, будет зависеть от того, чего хочет человек, пишущий заменяющее выражение.
Написав ".", он хочет вывести символ "точка" или конкатенировать строки? А написав "+", он хочет сложить числа или вывести знак "плюс"? Получается, что избрав "вывод символов как они есть" - нам нужно сначала интерполировать переменные, и уж потом делать все остальное - и поэтому принудительно делаем двойную вложенность кавычек - с помощью qq("выражение"). Если же хотим "выполнять" символы - то достаточно просто дважды выполнить заменяющую часть. P.S. Спасибо за интересное замечание, раньше я об этом не задумывался |
|||
|
||||
| tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
А откуда этот шаблон подстановок перётся?
Есть два варианта: при вводе шаблона использовать флаг типа вычислять чи ни или разработка отдельного синтаксиса, скорее всего, совпадающего с перл для евала, который описывает действия при подстановке. |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: нет Всего: 50 |
||||
|
||||
| tolkien |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: нет Всего: 4 |
У меня опять вопрос по интерполяции. Только уже в операторе поиска. Условия как прежде из внешнего файла считываются шаблоны. Только в этом случаи ненужно ничего заменять нужно только выдернуть данные. Решение нашел в гугле. Можно ли выполнить итерполяцию в этой строчке $res = eval "\"$m2\""; ,без использования eval?
Листинг3
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |