我有这个正则表达式:
(?:.*[a-zA-Z0-9].*){3}
Run Code Online (Sandbox Code Playgroud)
我用它来查看字符串中是否至少包含3个字母数字字符.它似乎工作.
它应匹配的字符串示例:
'a3c'
'_0_c_8_'
' 9 9d '
Run Code Online (Sandbox Code Playgroud)
但是,我需要它更快地工作.有没有更好的方法来使用正则表达式来匹配相同的模式?
编辑:我最终使用这个正则表达式为我的目的:
(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
Run Code Online (Sandbox Code Playgroud)
(不需要修饰符)
最有效的正则表达式方法是使用对比原理,即并排使用相反的字符类.这是一个正则表达式,可用于检查字符串是否有3个拉丁字母或数字:
^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}
Run Code Online (Sandbox Code Playgroud)
见演示.
如果你需要一个完整的字符串匹配,你需要追加.*
(或者.*$
如果你想保证你将匹配所有直到字符串/行的末尾),但在我的regexhero测试中,.*
产生更好的性能):
^(?:[^a-zA-Z0-9]*[a-zA-Z0-9]){3}.*
Run Code Online (Sandbox Code Playgroud)
此外,很大程度上取决于引擎.PCRE有地方在于自动possessification自动优化(即它把*
对*+
中(?:[^a-zA-Z0-9]*+
).
在此处查看密码验证优化的更多详细信息.
归档时间: |
|
查看次数: |
335 次 |
最近记录: |