2 回答
TA贡献1840条经验 获得超5个赞
它比你的限制少。
在 之后\D,有 2 个前瞻。对于您的正则表达式,它们是
(?=\w{5})(?=\d{2})这意味着非数字后面的东西必须同时满足它们。那是,
非数字后必须有 5 个单词字符,并且
非数字后必须有 2 位数字。
ana12紧跟在字符串中的非数字之后。an不是 2 位数字,因此您的正则表达式不匹配。
然而,工作正则表达式有这两个先行:
(?=\w{5})(?=\w*\d{2})它断言紧接在 之后必须有这两件事\D:
5个单词字符,和
一堆单词字符,后跟两位数字
ana12符合这两种描述。
试试这个Regex101 演示。查看正则表达式调试器中的第 6 步。那是它试图匹配第二个前瞻的时候
TA贡献1936条经验 获得超7个赞
您走在正确的轨道上,也许可以使用前瞻,并且模式的开始也正确,但是它缺少一些东西。考虑这个版本:
^\D(?=.*\d{2})\w{4,}$
下面是对模式的解释:
^ from the start of the string
\D match any non digit character
(?=.*\d{2}) then lookahead and assert that two consecutive digits occur
\w{4,} finally match four or more word characters (total of 5 or more characters)
$ end of the string
您当前尝试中缺少的主要部分是它在开头仅匹配一个非数字字符。您需要提供一个可以匹配 5 个或更多字符的模式。
添加回答
举报
