Регулярное выражение не работает после отладки - PullRequest
0 голосов
/ 10 июля 2009

У меня есть веб-сайт 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))"

Ответы [ 2 ]

0 голосов
/ 23 июля 2009

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

Ваш «второй код» - это регулярное выражение, отформатированное в виде дословной строки C #, которая будет точно соответствовать адресу электронной почты, например what@base.co.uk. В этом регулярном выражении нет ничего плохого.

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

0 голосов
/ 10 июля 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))"
...