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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> найти foo но не "...foo..." 
:(
    Опции темы
GoldFinch
Дата 13.5.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



как должна выглядеть регулярка для следующей замены:
входная строка:
 ___foo___"__foo__"___
результат замены
 ___bar___"__foo__"___

т.е. если часть строки заключена в "", то в ней замена не производится
PM MAIL ICQ   Вверх
dva300
Дата 19.5.2010, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(GoldFinch @ 13.5.2010,  14:21)
как должна выглядеть регулярка для следующей замены:
входная строка:
 ___foo___"__foo__"___
результат замены
 ___bar___"__foo__"___

т.е. если часть строки заключена в "", то в ней замена не производится

день добрый, 
можно так 

Код

use strict;
my $str='sdfsdfsdf foo sdfsdfsfsdf "sdsfsdf for sdfsdf" sfsdfsdfsdf foo sdfsfsdff';
$str =~ s/([^\"].*?)foo([^\"].*?)/\1BAR\2/gi;
print $str;


итог 

sdfsdfsdf BAR sdfsdfsfsdf "sdsfsdf for sdfsdf" sfsdfsdfsdf BAR sdfsfsdff


--------------------
Участник движения Культура Вождения
PM   Вверх
GoldFinch
Дата 19.5.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



dva300, вы ошиблись и написали в кавычках не foo а for.

PM MAIL ICQ   Вверх
dva300
Дата 19.5.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(GoldFinch @ 19.5.2010,  18:35)
dva300, вы ошиблись и написали в кавычках не foo а for.

да, согласен, прошу прощения.

частный случай когда "foo"
Код


use strict;
my $str='sdfsdfsdf foo sdfsdfsfsdf "foo" sfsdfsdfsdf foo sdfsfsdff';
$str =~ s/[^\"]foo[^\"]/BAR/gi;
print $str;


остается воткнуть произвольные способы.
вечером подумаю.
 
--------------------
Участник движения Культура Вождения
PM   Вверх
GoldFinch
Дата 20.5.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



dva300, в реальном случае, мне кроме кавычек надо будет еще пропускать /*..\n..*/ и //....\n

пока что я решил что регуляркой такое не сделать,
надо искать (foo|".*?foo.*?") и проверять 1й символ найденного
PM MAIL ICQ   Вверх
amg
Дата 21.5.2010, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(GoldFinch @  20.5.2010,  18:31 Найти цитируемый пост)
и проверять 1й символ найденного
 smile 
$str = join '', map {/^"/ || s/foo/bar/g; $_} split /(".*?")/, $str;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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