Мне кажется, это ошибка.

я есть очень сумасшедшее регулярное выражение, которое я пытаюсь диагностировать. Это также очень долго, но я сократил его до следующего сценария. Запустите с использованием 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. Первая версия подходит для кода, а вторая - нет. Почему это началось?

Ответы на вопрос(4)

Ваш ответ на вопрос