我试图确保输入中至少包含 4 个字母数字字符,并且也允许使用下划线。
正则表达式教程有点超出我的理解,因为它讨论了断言以及匹配时的成功/失败。
^\w*(?=[a-zA-Z0-9]{4})$
Run Code Online (Sandbox Code Playgroud)
我的理解:
\w--> 字母数字+下划线
*--> 匹配前一个标记零次到无限次(所以,这意味着它可以是任何字母数字/下划线字符,对吗?)
(?=[a-zA-Z0-9]{4})--> 向前查看前面的字符,如果它们至少包含 4 个字母数字字符,那么我就很好。
显然我错了,因为 regex101 没有向我显示任何匹配项。
您的模式^\w*(?=[a-zA-Z0-9]{4})$不匹配,因为:
^\w*从字符串开头匹配可选单词字符,如果只有单词字符,它将匹配直到字符串末尾(?=[a-zA-Z0-9]{4})如果正向预测可以从当前位置向右断言 4 个连续的字母数字字符,则正向预测为真。允许\w*回溯,并且可以回溯4个位置以使断言为真。$断言字符串的结尾,它无法匹配,因为位置向左移动了 4 步来满足之前的正向先行断言。使用前瞻,您可以做的是断言 4 个字母数字字符,前面带有可选的下划线。
如果断言为真,则匹配 1 个或多个单词字符。
^(?=(?:_*[a-zA-Z0-9]){4})\w+$
Run Code Online (Sandbox Code Playgroud)
模式匹配:
^字符串的开头(?=积极向前看,断言右边是什么
(?:_*[a-zA-Z0-9]){4}重复 4 次匹配可选_后跟字母数字字符)关闭前瞻\w+匹配 1+ 个单词字符(包括_)$字符串结尾| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |