Perl Regex: класс отрицательных символов дает неожиданные результаты

Интересно, есть ли у кого-то еще проблемы с perl 5.14 в ubuntu 12.04, когда дело доходит до отрицания класса символов в Perl.

Учитывая следующий небольшой фрагмент

while(<>) {

    print if /[^Dd]an/;
}

Со следующим небольшим входом

Dan
Frank
Steve
daniel

я бы ожидал, что вместо терминала будет напечатано

Frank
Steve

Я получаю только Фрэнк.

Просто интересно, если у кого-то еще была похожая проблема, и выяснил, в чем проблема. Я собираюсь немного поискать и посмотреть, смогу ли я придумать что-нибудь, что я обновлю, если найду что-нибудь

Приветствия

0
задан 9 February 2013 в 04:05

1 ответ

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

/[^Dd]an/

Действительно не совпадает Steve. По сути, вы сопоставляете все строки с последовательностью an, кроме тех, которые начинаются с D или d. Я не понимаю, как вы ожидаете, что это будет соответствовать Стиву.

Я думаю, что поведение правильное. Имейте в виду, что отрицание применяется только к персонажам в разделе [].

0
ответ дан 9 February 2013 в 04:05

Другие вопросы по тегам:

Похожие вопросы: