.net 有人能帮我理解这个正则表达式吗?

.net 有人能帮我理解这个正则表达式吗?,.net,regex,.net,Regex,我有以下正则表达式: (?=.{8,})[a-zA-Z]+[^a-zA-Z]+|[^a-zA-Z]+[a-zA-Z]+ 我不明白其中的“?=”部分 我的基本(不正确)理解是,它指的是一个8个字符或更长的字符串,它有一个或多个字母后跟一个或多个非字母,或者一个或多个非字母后跟一个或多个字母。我的理解显然不正确 引擎是.NET 任何帮助都将不胜感激。它看起来像一个简单的密码最小强度验证器。它匹配长度至少为8个字符且至少包含一个字母和一个非字母(按任何顺序)的任何内容 (=…)是必须匹配的,但不使用

我有以下正则表达式:

(?=.{8,})[a-zA-Z]+[^a-zA-Z]+|[^a-zA-Z]+[a-zA-Z]+
我不明白其中的“?=”部分

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

引擎是.NET


任何帮助都将不胜感激。

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

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

如果您在编写时没有前瞻,则术语
{8,}
将使用字符串中的所有字符,因此表达式的其余部分将无法匹配,因此它将始终失败

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

^(?=.{8})(?=.*?[a-zA-Z])(?=.*?[^a-zA-Z])
这只使用lookaheads,但其含义大致相同


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

部分以a开头,这意味着此处需要显示括号中的其他内容,但它不会占用匹配中的任何字符

基本上,
(?=.{8,})
部分要求字符串长度至少为8个字符,如您所述

在这之后,您有一个替换,它匹配至少一个ASCII拉丁字母,后跟至少一个非字母,或者至少一个非字母,后跟至少一个ASCII拉丁字母


我不太确定这种替换,很可能只有当字符串以字母开头时,才需要在开始时使用前瞻,要求字符串至少有8个字符长。

你说得对:这种替换应该包含在它自己的组中:
(?=。{8,})(?:[a-zA-Z]+[^a-zA-Z]+[^a-zA-Z]+[a-zA-Z]+)