Регулярные выражения

1. Используйте флаг "x" для сложных регулярных выражений

Если вы используете действительно сложное регулярное выражение, используйте модификатор "x" и разделите текст пробелами, чтоб он не выглядел как нагромождение мусора.

2. Используйте удобные ограничители для регулярных выражений

Не используйте наклонную черту в качестве ограничителя когда ваше выражение содержит прямые или обратные наклонные черты:

# Используем удобный ограничитель
$s =~ s{/}{::};
# Это куда нагляднее, чем /\//::/;

3. Разбивайте сложные регулярные выражения на части

Будет гораздо нагляднее, если Вы составите сложное регулярное выражение из нескольких кусочков. Кусочки можно хранить как в виде строк, так и в виде qr//:

# Строим регексп для матчинга чисел с плавающей точкой...
Readonly my $DIGITS    => qr{ \d+ (?: [.] \d*)? | [.] \d+         }xms;
Readonly my $SIGN      => qr{ [+-]                                }xms;
Readonly my $EXPONENT  => qr{ [Ee] $SIGN? \d+                     }xms;
Readonly my $NUMBER    => qr{ ( ($SIGN?) ($DIGITS) ($EXPONENT?) ) }xms;

Подробности см. в PBP стр. 261: «Build complex regular expressions from simpler pieces.».

4. Безопасно обрабатывайте данные, получаемые извне

Если Вы используете данные, полученные извне, как есть, тем самым вы подвергаете систему уязвимости. Используйте квотирование, например, так:

$test =~ m/\b\Q$param_name\E: \s+ (\d+)/x;

Вернуться к списку