2

昨天我回答了一个问题,用户试图“以任何顺序”匹配字符类。 正则表达式本身没有“和”结构,但我想出了解决方案(删节):

(?=[a-z])(?=\d)[a-z\d]{6,}

这不起作用,但将其更改为

(?=.*[a-z])(?=.*\d)[a-z\d]{6,}

确实有效。由于前瞻不消耗任何东西,我发现这个通配符要求有点奇怪。为什么.*需要使这个表达式匹配,例如,a1a1a1.

4

1 回答 1

4

需要使用通配符,这样前瞻可以表示“前方任何地方”而不是“就在此处,向前方向”。

没有它,你的正则表达式是这样的:

  • 在字符串中找到满足以下条件的某处(称为 X):
  • X 后面的字符是字母
  • X后面的字符也是一个数字
  • X 后有 6 个或更多字母数字字符

由于中间两个是互斥的(字符不能是字母和数字)它总是会失败。

但是,第二个正则表达式说:

  • 在字符串中找到满足以下条件的某处(称为 X):
  • 在任意数量的字符之后,有一个字母
  • 在任意数量的字符之后,有一个数字
  • X 后至少有 6 个字母数字字符

希望这可以解释差异;)

于 2013-03-02T00:45:51.433 回答