|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : InSAn 2:5020/400 04 May 2001 13:05:15 To : All Subject : Re: Проверка на принадлежность -------------------------------------------------------------------------------- > >>> @array есть ("?","!","...") > >>> $scalar - "нифига" > > rcou>> Правленое и проверенное: > > rcou>> my $line="abcdef!!!"; > rcou>> my $mask=("\Q".join('|',qw(? ! + .))."\E"); > > >> '\b('.join('|',map("\\Q$_\\E",@array)).')\b' > > >> все-таки... > > niar> Вариант 1: > niar> --------------------------- > niar> @array = ('AAA','bbb'); > niar> $mask = '\b('.join('|',map("\\Q$_\\E",@array)).')\b'; > > niar> $text = 'ddd eee AAA fff ggg'; > > niar> if ($text =~ /$mask/i) { print 'Ok' } > niar> else { print 'Fig' } > niar> --------------------------- > niar> Результат - Fig > > niar> === > niar> Вариант 2: > niar> --------------------------- > niar> @array = ('AAA','bbb'); > > niar> $text = 'ddd eee aaa fff ggg'; > > niar> if ($text =~ /\b(\QAAA\E|\Qbbb\E)\b/i) { print 'Ok' } > niar> else { print 'Fig' } > niar> --------------------------- > niar> Результат - Ok > > niar> Почему если вместо переменной $mask в выражение писать ее значение, то > niar> все - Ok, иначе - Fig? > > Судя по всему, полезла какая-то фигня с подстановкой бэкслешей. Что самое > интересное - пишу > > $mask = '\\b('.join('|',map('\\Q'.$_.'\\E',@array)).')\\b'; > print $mask; > > (работа с STDIN в perl -l) > получаю > > \b(\QAAA\E|\Qbbb\E)\b > > То есть бэкслеши одинарные... Счетверение бэкслешей тоже не помогает... Да бакслеши здесь нипричем... (в дебагере проверял - все нормально, $mask равен тому, чему должен быть равен). Проблема в следующем: когда в переменной писать квантификаторы \Q или \E и эту переменную подставлять в регексп, то не работает... А без них (\Q \E) - все нормально. Почему? Как побороть? -- - --- Best regards, InSAn http://delphi.proext.com - Delphi-программисту http://adv.proext.com - Магазин сетевой рекламы http://shop.proext.com - Лучшие книги! Отправлено через сервер Talk.Ru - http://www.talk.ru --- ifmail v.2.15dev5 * Origin: Talk.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/64880b866f70.html, оценка из 5, голосов 10
|