The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
perl: затык с регекспом, !*! ACCA, 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

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

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

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

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

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

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

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

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




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

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