有人可以帮我理解这个正则表达吗?

Sak*_*o73 0 .net regex

我有以下正则表达式:

(?=.{8,})[a-zA-Z]+[^a-zA-Z]+|[^a-zA-Z]+[a-zA-Z]+
Run Code Online (Sandbox Code Playgroud)

我不明白它的"?="部分.

我的基本(不正确)理解是它说一个长度为8个字符或更长的字符串,其中有一个或多个字母后跟一个或多个非字母,或者一个或多个非字母后跟一个或多个字母.我的理解显然不正确.

引擎是.NET.

任何帮助,将不胜感激.

Mar*_*ers 5

它看起来像一个简单的密码最小强度验证器.它匹配至少8个字符长且包含至少一个字母和一个非字母(以任何顺序)的任何内容.

(?= ..)是一个必须匹配的前瞻,但不消耗任何字符.如果少于8个字符,则前瞻失败,因此整个匹配失败.如果前瞻成功,则正则表达式的其余部分仍然必须匹配,但它从头开始检查,因为尚未消耗任何字符.

如果你在没有前瞻的情况下编写它,该术语.{8,}将消耗字符串中的所有字符,因此表达式的其余部分不会留下任何内容,因此它总是会失败.

编写此表达式的另一种方法是:

^(?=.{8})(?=.*?[a-zA-Z])(?=.*?[^a-zA-Z])
Run Code Online (Sandbox Code Playgroud)

这仅使用前瞻,但含义大致相同.

我还在^开头添加了一个锚点,以避免在匹配失败时进行不必要的额外搜索.