Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение в переменной, Поддержите начинающего 
V
    Опции темы
Hydrevt
Дата 9.10.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.10.2008

Репутация: нет
Всего: нет



При попытке занести регулярное выражение в переменную оно интерпретируется не так, как бы того хотелось. Думаю, всё пояснит пример:
Код

my $search = '(i)';
my $replace = '\1\1';
my $string = 'dice';

$string =~ s/$search/\1\1/;
print $string, "\n"; # 'diice', as expected.

$string = 'dice';

$string =~ s/$search/$replace/;
print $string, "\n"; # 'd\1\1se'    :(

Пробовал менять в строке замены $replace на ${$replace} (не очень ещё понимая смысл подобного действия smile , виденного в одном из примеров), ставить строку в двойные кавычки и менять \1 на $1 - всякий раз результат либо нулевой, либо неудовлетворительный.
PM MAIL   Вверх
amg
Дата 9.10.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: нет
Всего: 50



Можно так
Код
my $search = '(i)';
my $replace = '"$1$1"';
my $string = 'dice';

$string =~ s/$search/$replace/ee;

Но лучше, IMHO, изменить алгоритм, чтобы такой изврат не требовался.
PM MAIL   Вверх
ginnie
Дата 9.10.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 1
Всего: 49



amg, спасибо за полезную информацию! Если кто-то, также, как и я не совсем понял, как работает предложенный вариант, читайте Regular expression "replace string interpolation" problem.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 9.10.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



 smile 
Эта фишка довольно часто встречается в JAPH'ах


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Hydrevt
Дата 9.10.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.10.2008

Репутация: нет
Всего: нет



Спасибо за быстрый и исчерпывающий ответ.
PM MAIL   Вверх
ginnie
Дата 9.10.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 1
Всего: 49



 smile 

KSURi, на странице http://www.cpan.org/misc/japh модификатор ee встречается всего в двух местах  smile 

Это сообщение отредактировал(а) ginnie - 9.10.2008, 15:39


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 9.10.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



ginnie, ну там далеко не все творения выложены. Мне приходилось видеть это в джапфах знакомых, в обфусцированном коде. В Perl Underground кажется пару раз было, хотя может путаю. Ну и еще perldoc perlop, в конце концов.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.1114 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.