Класс Regex.NET и новая строка

Надеюсь, это поможет кому-то еще, потому что я потратил много времени на устранение этой ошибки, хотя я установил AutomaticChallenge = true.

Оказывается, вы получите ту же ошибку, если поставить app.UseIdentity(); после app.UseMvc(routes => ...). Теперь, когда я знаю ответ, это очевидно. Это потому, что все это промежуточное ПО происходит в том порядке, в котором вы его добавили.

Это приводит к ошибке « Нет обработчика аутентификации настроен »:

    public void Configure(...)
    {
        app.UseMvc(routes => { routes.MapRoute(...) }; );

        app.UseIdentity();
    }

Это не вызывает ошибку:

    public void Configure(...)
    {
        app.UseIdentity();

        app.UseMvc(routes => { routes.MapRoute(...); });
    }
5
задан Peter Mortensen 31 May 2015 в 16:48
поделиться

5 ответов

Если строка заканчивается разрывом строки, RegexOptions.Multiline работать не будет. $ просто проигнорирует последний разрыв строки, так как после этого ничего нет.

Если вы хотите сопоставить до самого конца строки и игнорировать любые разрывы строк, используйте \ z

Regex regex = new Regex(@"^[a-z0-9]+\z", RegexOptions.Multiline);

Это касается как MutliLine, так и SingleLine, это не имеет значения.

9
ответ дан 18 December 2019 в 07:31
поделиться

Из ] RegexOptions :

Многострочный режим. Изменяет значение символов ^ и $ таким образом, чтобы они соответствовали началу и концу, соответственно, любой строки, а не только началу и концу всей строки.

Таким образом, если вы передадите RegexOptions.Multiline конструктору Regex , вы дадите этому экземпляру указание обрабатывать последний $ как соответствие для символов новой строки - не просто конец самой строки.

1
ответ дан 18 December 2019 в 07:31
поделиться

Просто чтобы дать более подробную информацию для ответа Smazy. Это выдержка из: Поваренная книга регулярных выражений Яна Гойвертса и Стивена Левитана. Copyright 2009 Ян Гойвертс и Стивен Левитан, 978-0-596-2068-7

Разница между ‹\ Z› и ‹\ z› вступает в игру, когда последний символ в вашем тексте темы Разрыв строки. В этом случае ‹\ Z› может совпадение в самом конце темы текст после последнего разрыва строки, как ну как непосредственно перед этой строкой перерыв. Преимущество в том, что вы можете поиск ‹omega \ Z› без необходимости беспокоиться о том, чтобы оторвать хвост разрыв строки в конце вашей темы текст. При чтении строки файла линия, некоторые инструменты включают строку разрыв в конце строки, тогда как другие этого не делают; ‹\ Z› маскирует это разница. ‹\ Z› соответствует только в самый конец предметного текста, поэтому он не будет соответствовать тексту, если в конце строки следует перерыв. Якорь ‹$› эквивалент ‹\ Z›, пока вы это делаете не включайте совпадение «^ и $ в строке» ломается »вариант. Эта опция отключена по умолчанию для всех разновидностей регулярных выражений, кроме Рубин. Ruby не предлагает способа выключите эту опцию. Так же, как ‹\ Z›, ‹$› Совпадений в самом конце тематический текст, а также перед последний разрыв строки, если таковой имеется.

Конечно, я бы не нашел его без ответа Smazy.

0
ответ дан 18 December 2019 в 07:31
поделиться

Могут быть различия в окончании строки windows / linux. Но все же странно, что \ n \ n получает ложь таким образом ... Вы пробовали с установленным флагом RegexOptions.Multiline ?

0
ответ дан 18 December 2019 в 07:31
поделиться

Механизм .NET regex воспринимает \n как конец строки. И это проблема, если ваша строка имеет \r\n переносы строк в стиле Windows. При включенной опции RegexOptions.Multiline $ совпадает между \r и \n, а не перед \r.

$ также совпадает в самом конце строки, как и \z. Разница в том, что \z может совпадать только в самом конце строки, а $ также совпадает перед трейлингом \n. При использовании RegexOptions.Multiline, $ также совпадает перед любым \n.

Если у вас проблемы с переводами строк, то сначала нужно выполнить поиск и замену, чтобы заменить все \r на ничто, чтобы убедиться, что все строки заканчиваются только \n.

10
ответ дан 18 December 2019 в 07:31
поделиться
Другие вопросы по тегам:

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