Может кто-нибудь помочь мне понять это регулярное выражение? - PullRequest
0 голосов
/ 27 января 2010

У меня есть следующее регулярное выражение:

(?=.{8,})[a-zA-Z]+[^a-zA-Z]+|[^a-zA-Z]+[a-zA-Z]+

Я не понимаю "? =" Часть этого.

Мое базовое (неправильное) понимание состоит в том, что речь идет о строке длиной 8 символов или более, в которой одна или несколько букв следуют за одной или несколькими непоследовательными буквами, или одна или несколько не букв, за которыми следует одна больше букв. Мое понимание, очевидно, не правильно.

Двигатель .NET.

Любая помощь будет оценена.

Ответы [ 2 ]

5 голосов
/ 27 января 2010

Похоже на простой верификатор минимальной надежности пароля. Он соответствует всему, что имеет длину не менее 8 символов и содержит как минимум одну букву и одну не-букву (в любом порядке).

(? = ..) - это lookahead , которое должно совпадать, но не потреблять никаких символов. Если количество символов меньше 8, предварительный просмотр не выполняется, поэтому полное совпадение не выполняется. Если предварительный просмотр завершается успешно, остальная часть регулярного выражения должна все же совпадать, но она начинает проверку с самого начала, потому что ни один символ еще не использовался.

Если бы вы написали это без заглядывания, термин .{8,} потреблял бы все символы в строке, так что не осталось бы ничего, чтобы остальная часть выражения соответствовала, поэтому он всегда потерпит неудачу.

Альтернативный способ написания этого выражения:

^(?=.{8})(?=.*?[a-zA-Z])(?=.*?[^a-zA-Z])

Здесь используются только взгляды, но смысл примерно такой же.

Я также добавил якорь ^ в начале, чтобы избежать ненужного дополнительного поиска в случае сбоя совпадения.

2 голосов
/ 27 января 2010

Часть ?= запускает положительный прогноз , означающий, что в скобках должно присутствовать то, что еще есть в скобках, но оно не потребляет никаких символов в совпадении.

Как правило, деталь (?=.{8,}) требует, чтобы длина строки была не менее 8 символов, как вы уже заметили.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...