Регулярное выражение C# работает неправильноC#

Место общения программистов C#
Ответить
Anonymous
 Регулярное выражение C# работает неправильно

Сообщение Anonymous »

Я написал несколько регулярных выражений для веб-приложения ASP.NET на C# (3.5). Я ни в коем случае не являюсь продвинутым пользователем регулярных выражений. Я устраняю одну неполадку, которая меня совершенно сбивает с толку, почему она не работает. Тем более, что у меня есть аналогичные, которые работают нормально.

Вот подробности. Спасибо за ваше время и любезную помощь.

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

Я определил некоторые правила как таковые (примечание: они просто созданы мной и не имеют никакого программного значения или значения):

Элемент 1: Cxxxx*####

Элемент 2: Czzzz*####

Для элемента 1:
Это означает, что эта последовательность должна начинаться с буквы «C». Следующие 4 символа (четыре X) являются буквенно-цифровыми. Звездочка означает, что это может быть («R» или «D»). Символы # означают, что это может быть последовательность из любых 4 буквенно-цифровых символов.

Для элемента 2:
Это означает, что эта последовательность должна начинаться с буквы «C». Следующие 4 символа (четыре Z) являются буквенно-цифровыми. Звездочка означает, что это может быть («R» или «D»). Символы # означают, что это может быть последовательность из любых 4 буквенно-цифровых символов.

Между двумя элементами X и Z просто означают, что последовательность из 4 символов не может быть одинаковой. Он должен быть уникальным между ними.

Таким образом, эти два элемента нарушают правило, поскольку «1491» повторяется в одном и том же месте последовательности.

Элемент 1: C1491D1234

Элемент 2: C1491D5678

Этот код вернет true, поскольку это должно быть правильно с учетом правил последовательности:

Элемент 1: C1491D1234

Элемент 2: C1599D5678

Этот код вернет true, поскольку с учетом правил последовательности все должно быть хорошо:

Элемент 1: C1491D1234

Элемент 2: C1599D1234

Это регулярное выражение, которое я использую для создания этого правила:

C([A-Za-z0-9]{4})[DdRr][A-Za-z0-9]{4}-C(?!\1)[DdRr][A-Za-z0-9]{4}

Это два элемента, которые я использую для проверки условия:

Элемент 1: C1491D1491

Элемент 2: C1000R4100

По какой-то причине мое регулярное выражение неверно и не возвращает true.

Вот как моя программа на C# видит последовательность: C1491D1491-C1000R4100

Для тестирования я использовал этот веб-сайт:

http://regexhero.net/tester/

Подробнее здесь: https://stackoverflow.com/questions/894 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»