为什么我的正则表达式在使用字符串锚点的开头和结尾时不起作用?
Why my regex does not work when using beginning and end of string anchors?
我开发了以下正则表达式,试图匹配至少包含一位数字和至少一个小写字符的字符串。
(?=.*[a-z])(?=.*\d)
这似乎工作正常。例如它匹配 'abc3' 而不是 'abc'
但是,一旦我通过添加字符串锚点的开头和结尾来修改正则表达式,它就会停止工作。你知道为什么吗?
^(?=.*[a-z])(?=.*\d)$
$
在这里结束比赛。因此,您基本上是在测试小写字符和数字( 可以)。由于前瞻的宽度为零,因此当前检查位置不会改变(由于^
,这里默认处于开始位置)。
检查小写字母和数字后,基本上剩下 ^$
匹配空字符串的正则表达式(记住匹配的位置没有改变 因为零宽度属性 前瞻).
这与您的要求矛盾(因为已经有一个小写字符和一个数字。所以字符串永远不能为空。这会导致正则表达式失败)
你必须使用
^(?=.*[a-z])(?=.*\d).*$
我开发了以下正则表达式,试图匹配至少包含一位数字和至少一个小写字符的字符串。
(?=.*[a-z])(?=.*\d)
这似乎工作正常。例如它匹配 'abc3' 而不是 'abc'
但是,一旦我通过添加字符串锚点的开头和结尾来修改正则表达式,它就会停止工作。你知道为什么吗?
^(?=.*[a-z])(?=.*\d)$
$
在这里结束比赛。因此,您基本上是在测试小写字符和数字( 可以)。由于前瞻的宽度为零,因此当前检查位置不会改变(由于^
,这里默认处于开始位置)。
检查小写字母和数字后,基本上剩下 ^$
匹配空字符串的正则表达式(记住匹配的位置没有改变 因为零宽度属性 前瞻).
这与您的要求矛盾(因为已经有一个小写字符和一个数字。所以字符串永远不能为空。这会导致正则表达式失败)
你必须使用
^(?=.*[a-z])(?=.*\d).*$