Регулярное выражение не работает после отладки

У меня есть веб-сайт ASP.NET с текстовым полем проверки регулярного выражения.

Я изменил выражение в свойстве проверки регулярного выражения «выражение проверки», и после компиляции (перестроения) и запуска ИЗМЕНЕНИЯ проверки не отражаются.

Предыдущая проверка работает нормально, но измененная проверка не работает.

Пожалуйста помогите!

изменить:

Первый код:

([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com))

Второй код:

@"([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\.co\.uk)|(arggroup\.com))"

person Community    schedule 10.07.2009    source источник
comment
Возможно, вам потребуется опубликовать свои регулярные выражения и, возможно, код, который вы используете для инициализации ваших валидаторов.   -  person Jay S    schedule 10.07.2009
comment
Вы работаете локально в VS или проверяете опубликованный сайт? Если последнее, есть вероятность, что вы не опубликовали изменения? Если это первое, попробуйте закрыть браузер и снова запустить свой сайт. Кроме этого, примеры кода ничем не помогут.   -  person Lazarus    schedule 10.07.2009
comment
Первый код ([a-zA-Z0-9_-.]+)\@((base.co.uk)|(base.com)|(group.com)|(arg.co.uk)|(arggroup. com)) Второй код @([a-zA-Z0-9_\-.]+)@((base\.co\.uk)|(base\.com)|(group\.com)|(arg\ .co\.uk)|(arggroup\.com))   -  person    schedule 10.07.2009
comment
Я запускаю vs2008 после сборки и нажимаю на значок ›. IE автоматически приходит, я закрыл и открыл браузер .. NO JOY   -  person    schedule 10.07.2009
comment
ошибочно поставил первый код так же, как второй .. теперь исправьте это в вопросе   -  person    schedule 10.07.2009


Ответы (2)


Предполагая, что ваш «первый код» является буквальным регулярным выражением, вам нужно экранировать дефис в классе символов с помощью обратной косой черты.

Ваш «второй код» представляет собой регулярное выражение, отформатированное как дословная строка С#, которая будет отлично соответствовать адресу электронной почты, такому как [email protected]. В этом регулярном выражении нет ничего плохого.

Вам придется опубликовать код, в котором вы используете это регулярное выражение, если оно не работает так, как вы хотите.

person Jan Goyvaerts    schedule 23.07.2009

В этой части: [a-zA-Z0-9_\-.] вы избегаете дефиса. Правильный способ поставить дефис в классе символов регулярных выражений - это первая позиция (или он думает, что это часть диапазона):

[-a-zA-Z0-9_.]

Затем вы удалили обратную косую черту перед @. В Perl @ будет восприниматься как часть имени списка, но в C# я не уверен, какой эффект он имел бы, чтобы не избежать его.

Убегание периодов также вызывает подозрение. Возможно, вам придется удвоить их: например. \\. Вместо этого для точки я бы использовал класс символов: т. е. [.] Внутри класса символов точка теряет свое особое значение.

Попробуй это:

@"([-a-zA-Z0-9_.]+)\@((base[.]co[.]uk)|(base[.]com)|(group[.]com)|(arg[.]co[.]uk)|(arggroup[.]com))"
person Paul Chernoch    schedule 10.07.2009
comment
Это странно. С этим неэкранированным дефисом исходное регулярное выражение даже не должно было компилироваться. Когда я протестировал его в онлайн-тестере RegExLib, я получил сообщение об ошибке, говорящее о диапазоне [x-y] в обратном порядке. - person Alan Moore; 11.07.2009
comment
Экранирование дефиса в классе символов, чтобы сделать его литералом, отлично работает как с Perl, так и с .NET. C# не выполняет интерполяцию переменных, как Perl, поэтому нет необходимости экранировать @. [.] соответствует буквальной точке, как \. за исключением того, что нужно ввести еще один символ. Строки Verbatim в C# не требуют экранирования обратной косой черты. - person Jan Goyvaerts; 23.07.2009
comment
Я когда-то знал о веб-сайте, который позволял вам указать, какие разновидности регулярных выражений вы тестируете, и он поддерживал многие из них. Я потерял его из виду. Я предпочитаю использовать широко поддерживаемый синтаксис, так как это упрощает переход от системы к системе. Какой тестер регулярных выражений вам нравится больше всего? - person Paul Chernoch; 31.07.2009