The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"perl: затык с регекспом"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"perl: затык с регекспом"  +/
Сообщение от ACCA (ok) on 07-Июл-11, 18:11 
Что-то я затупил... Почему Wans находится, а Mans нет??


while (<DATA>) {
    print "=== Mans\n"          if m'I\/Ians';
    print "=== Wans\n"          if m'\/Vans';
}

__DATA__
I\/Ians
\/Vans

На всякий случай:
$ perl -v

This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "perl: затык с регекспом"  +/
Сообщение от XAnder (ok) on 07-Июл-11, 19:48 
Тонкости интерпретации. В начале выражение в одинарных кавычках читается как лексема языка (то есть в нашем случае буквально), а потом полученная строка обрабатывается интерпретатором регулярных выражений, который понятия не имеет, какие там были кавычки — не его это дело.

'\/' — это интерпретатор понимает как «символ /»

'I\/Ians' — а это, соответственно, как «символы I / I a n s»

В этом нетрудно убедиться, дописав в секцию __DATA__ строчку «I/Ians»

Вообще же, советую по возможности избегать конструкций вида m'...', используя более привычные m/.../ или m{...}.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "perl: затык с регекспом"  +/
Сообщение от ACCA (ok) on 07-Июл-11, 20:58 
> Тонкости интерпретации. В начале выражение в одинарных кавычках читается как лексема [...]
> Вообще же, советую по возможности избегать конструкций вида m'...', используя более
> привычные m/.../ или m{...}.

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

Переформулирую вопрос - можно ли заставить m// воспринимать \ буквально, как это всегда происходит со всякими \}?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "perl: затык с регекспом"  +/
Сообщение от XAnder (ok) on 08-Июл-11, 08:59 
> Переформулирую вопрос - можно ли заставить m// воспринимать \ буквально, как это
> всегда происходит со всякими \}?

Можно: m/a\\b/ соответствует строке «a\b», но не «a\\b»

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "perl: затык с регекспом"  +/
Сообщение от Etch on 08-Июл-11, 09:02 
> Переформулирую вопрос - можно ли заставить m// воспринимать \ буквально, как это
> всегда происходит со всякими \}?

m/\\/;
?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру