![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
В регулярном выражении использую переменную:
if (/$exceptions/){} где $exceptions = "исключение1|исключение2|исключение3|..." Исключения представляют собой обычные строки вида: "Расчет максимального среднего дневного заработка для исчисления пособий по временной нетрудоспособности" "Независимо от места прохождения военной службы по контракту (на территории России или за ее пределами)" "Размер единовременного пособия при рождении ребенка проиндексирован в соответствии со статьей 4.2" Каким образом можно заэкранировать все символы в исключениях, которые могут интерпретироваться как метасимволы в регулярном выражении? Например, во втором исключении есть скобки, необходимо перед каждой скобкой поставить \(. Также могут встречать другие метасимволы: [] ?, +, . , >, < и т.д. Существует ли надежный способ экранирования? |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc perlre на предмет Escape sequences
|
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
В общем, готового решения нет?
Еще один момент. У меня следующее регулярное выражение:
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
смотря что понимать под "готовым решением".
непонятен глагол "перебрать" |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
есть варианты:
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
не влияет:
# print -l "aa" "bb" "cc" "dd" | perl -lne '$a = "aa|bb\\E|cc"; print "$_: ",(m#$a# ? "yes" : "no")' aa: yes bb: no cc: yes dd: no # print -l "aa" "bb" "cc" "dd" | perl -lne '$a = "aa|bb\\E|cc"; print "$_: ",(m#\Q$a\E# ? "yes" : "no")' aa: no bb: no cc: no dd: no # print -l "aa" "bb" "cc" "dd" | perl -lne '$a = "aa|bb\\E|cc"; print "$_: ",(m#\Q$a\E|dd# ? "yes" : "no")' aa: no bb: no cc: no dd: yes |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
допустим, есть хеш с ключами вида исключение1 исключение2 исключение3 я хочу вставить эти исключения в регулярное выражение
Если исключений мало, то можно просто склеить все строки в одну переменную: $var = "исключение1|исключение2|исключение3". Но если этих исключений больше сотни, то скорость регулярного выражения сильно упадет. Существует ли возможность проверки из регулярного выражения на наличие совпавшего куска в хеше? Например, мы захватили фрагмент в переменную (.+), а теперь нужно сделать проверку вроде if (exists $exceptions{$1}){do_smth()} |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc perlre на предмет "(??{ code })", может поможет
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |