Я написал несколько регулярных выражений для веб-приложения 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