Мне кажется, это ошибка.
я есть очень сумасшедшее регулярное выражение, которое я пытаюсь диагностировать. Это также очень долго, но я сократил его до следующего сценария. Запустите с использованием Strawberry Perl v5.26.2.
use strict;
use warnings;
my $text = "M Y H A P P Y T E X T";
my $regex = '(?i)(?<!(Mon|Fri|Sun)day |August )abcd(?-i)';
if ($text =~ m/$regex/){
print "true\n";
}
else {
print "false\n";
}
Это дает ошибку «Переменная длина, которая не реализована в регулярных выражениях».
Я надеюсь, что вы можете помочь с несколькими вопросами:
Я не понимаю, почему эта ошибка произошла, потому что все возможные значения за кадром - 7 символов: «Понедельник», «Пятница», «Воскресенье», «Август».Я не писал это регулярное выражение сам, и я не уверен, как интерпретировать синтаксис(?i)
а также(?-i)
, Когда я избавлюсь от(?i)
ошибка на самом деле исчезает. Как Perl интерпретирует эту часть регулярного выражения? Я думаю, что первые два символа оцениваются как «необязательные литеральные скобки», за исключением того, что круглые скобки не экранируются, а также в этом случае я получаю другую синтаксическую ошибку, потому что закрывающие скобки не будут сопоставлены.Такое поведение начинается где-то между Perl 5.16.3_64 и 5.26.1_64, по крайней мере, в Strawberry Perl. Первая версия подходит для кода, а вторая - нет. Почему это началось?