如果没有重复4次或更多次的字符,我想构造一个匹配密码的正则表达式。
如果有重复4次的字符或字符组,我会提出匹配的正则表达式:
(?:([a-zA-Z\d]{1,})\1\1\1)
如果字符串不包含重复,有没有办法匹配?我尝试了Regular expression to match a line that doesn't contain a word?中建议的方法,因为我认为正面/负面前瞻的一些组合将会成功。但我还没有找到工作实例。
重复是指字符串中任意数量的字符
aaaaxbc
ABABABAB
x14aaaabc
abcaxaxaz
(a这里是4次,但不是问题,我想过滤掉重复的模式)
答案 0 :(得分:1)
该链接非常有用,我可以使用它从原始表达式创建正则表达式。
^(?:(?!(?<char>[a-zA-Z\d]+)\k<char>{3,}).)+$
或
^(?:(?!([a-zA-Z\d]+)\1{3,}).)+$
答案 1 :(得分:0)
Nota Bene :这个解决方案没有对这个问题做出明确的回答,它对于表达的需求做了太多。
用Python语言:
import re
pat = '(?:(.)(?!.*?\\1.*?\\1.*?\\1.*\Z))+\Z'
regx = re.compile(pat)
for s in (':1*2-3=4@',
':1*1-3=4@5',
':1*1-1=4@5!6',
':1*1-1=1@',
':1*2-a=14#a~7&1{g}1'):
m = regx.match(s)
if m:
print m.group()
else:
print '--No match--'
结果
:1*2-3=4@
:1*1-3=4@5
:1*1-1=4@5!6
--No match--
--No match--
它将为正则表达式电机提供大量工作,因为模式的原理是,对于它所经过的字符串的每个字符,它必须验证在剩余序列中未找到当前字符三次跟随当前字符的字符 但它显然有效。