|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Stanislav Nekrasov 2:5020/400 08 May 2001 17:45:24 To : All Subject : Re: Проверка на принадлежность -------------------------------------------------------------------------------- Hello InSAn; > > Судя по всему, полезла какая-то фигня с подстановкой бэкслешей. Что самое > > интересное - пишу > > > > $mask = '\\b('.join('|',map('\\Q'.$_.'\\E',@array)).')\\b'; > > print $mask; > > > > (работа с STDIN в perl -l) > > получаю > > > > \b(\QAAA\E|\Qbbb\E)\b > > > > То есть бэкслеши одинарные... Счетверение бэкслешей тоже не помогает... > > Да бакслеши здесь нипричем... (в дебагере проверял - все нормально, $mask > равен тому, чему должен быть равен). > Проблема в следующем: когда в переменной писать квантификаторы \Q или \E и > эту переменную подставлять в регексп, то не работает... А без них (\Q \E) - > все нормально. > Почему? Как побороть? Hе знаю, может я не прав, но я тоже пришел к выводу, что \Q и \E не обрабатываются, если подставляются из переменной. Как побороть, не знаю, но пришло в голову решение такое: @array = ('AAA[b]c','bbb'); $mask = '\b('.join('|',map("\Q$_\E",@array)).')\b'; $text = 'ddd eee AAA[b]с fff bbb ggg ccc'; print "$text\n$mask\n"; if ($text =~ /$mask/i) { print 'Ok' } else { print 'Fig' }; ,т.е. заставить обрабатывать строчки сам map ... вроде бы работает... по крайней мере на приведенном примере и аналогичных. Кстати говоря, если уж обрабатывать такие "слова", которые содержат спец-символы, то может не пройти из-за '\b' -- если например слово будет 'abc[a]' -- т.к. \b -- граница между \w символом и \W или концом\началом строки... есесно, ] к \w не отнесется... так что если такое возможно, придется убирать \b (прошу извинить, если наговорил глупостей -- но мне так показалось :)) best WISHes, Stas. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/549420cb096d.html, оценка из 5, голосов 10
|