Хитрое регулярное выражение - PullRequest
3 голосов
/ 28 октября 2010

Мне нужно разрешить только буквенно-цифровые символы (с заглавными буквами) длиной от 0 до 25 символов и без ленивых числовых значений для всех повторений.

У меня есть первая часть: Regex.IsMatch (tmpResult, "^ [0-9A-Z] {0,25} $ ");(это просто)

111112 - соответствует
AABD333434 - соответствует
55555555 - нет совпадений
555 - нет совпадений

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

5 голосов
/ 28 октября 2010
^(?!(.)\1*$)[0-9A-Z]{0,25}$

Дополнительная (?!(.)\1*$) будет отклонять любые строки, состоящие из повторяющихся символов.

(?!…) - это отрицательный прогноз , который вызовет сбой основного регулярного выражения, если соответствует, а (.)\1* будет соответствовать строке повторяющихся символов.

0 голосов
/ 28 октября 2010

Вы можете просто сделать это с помощью обычного метода ... Как только вы получите совпадение с вашим первым выражением, просто используйте подпрограмму, чтобы перебрать каждый символ и вернуть true, когда вы впервые встретите символ, который отличается от первого строка.

Он должен возвращать true после проверки только первых 2 символов для большинства строк, если только это не недопустимая строка.

Это должно быть так же быстро, как регулярное выражение, если не быстрее, если оно хорошо реализовано.

...