我有这个正则表达式:
(?:.*[a-zA-Z0-9].*){3}
我用它来查看字符串中是否至少包含 3 个字母数字字符。似乎有效。
它应该匹配的字符串示例:
'a3c'
'_0_c_8_'
' 9 9d '
但是,我需要它更快地工作。有没有更好的方法使用正则表达式来匹配相同的模式?
编辑:
我最终用了这个regex https://www.regex101.com/r/cF0oA9/1出于我的目的:
(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
(无需修饰符)
最有效的正则表达式方法是使用对比原理 http://www.rexegg.com/regex-style.html#contrast,即并排使用相反的字符类。下面是一个正则表达式,可用于检查字符串是否包含 3 个拉丁字母或数字:
^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
See demo https://regex101.com/r/vD9lR8/1.
如果您需要完整的字符串匹配,则需要附加.*
(or .*$
如果你想保证你会匹配所有字符串/行的末尾),但在我对 regexhero 的测试中,.*
产生更好的性能):
^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}.*
此外,很大程度上取决于发动机。 PCRE 具有自动优化功能,其中包括自动占有(即,它将*
to *+
in (?:[^a-zA-Z0-9]*+
).
See 有关密码验证优化的更多详细信息 http://www.rexegg.com/regex-lookarounds.html#password here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)