Regex 如何否定反向引用正则表达式

Regex 如何否定反向引用正则表达式,regex,backreference,Regex,Backreference,我正在生成一个正则表达式,以验证密码,并满足以下条件: Have at least 6 characters. Only have alphanumeric characters. Don't have the same initial and ending character. 我想让第一个和最后一个字符匹配,然后我会否定反向引用。我的问题在于如何否定这种反向引用。我在网上找了些东西,但什么都没找到。以下是我目前得到的信息: ([\w])[\w]{3}[\w]+\1 //Generates

我正在生成一个正则表达式,以验证密码,并满足以下条件:

Have at least 6 characters.
Only have alphanumeric characters.
Don't have the same initial and ending character.
我想让第一个和最后一个字符匹配,然后我会否定反向引用。我的问题在于如何否定这种反向引用。我在网上找了些东西,但什么都没找到。以下是我目前得到的信息:

([\w])[\w]{3}[\w]+\1 //Generates a password with at least 6 chars in which the first and final characters match
使用此模式

^(?=[0-9-a-zA-Z]+$)(.).{4,}(?!\1). 

您可以使用此正则表达式:

^([0-9a-zA-Z])(?!.*\1$)[0-9a-zA-Z]{5,}$
  • (?!.*\1$)
    将确保第一个字符和最后一个字符不相同
  • [0-9a-zA-Z]{5,}
    将确保长度至少为6,并且输入中只有字母数字字符

根据此线程--您需要使用负前瞻来否定反向引用。仅供参考,您的正则表达式可以工作6个字符,但至少不能工作6个字符。你的
{3}
应该是
{3,}
或者甚至是
{4,}
(你可以删除最后的
[\w]
。此外,你不需要将
\w
放在方括号内,它将允许非字母数字(在本例中,下划线
.
)。它确实有效,但我不知道为什么会这样做!(*\1$)使初始字符和最终字符不同。这是一个负前瞻-它确保最后一个字符与第一个组中捕获的字符不同。
(?!*\1$)
是一个负前瞻,意味着如果最后一个字符与第一个字符相同,则匹配失败。好吧,这几乎是一个模板,如(?)*