正则表达式,如果没有重复则匹配

时间:2013-12-08 14:57:25

标签: regex validation non-repetitive

如果没有重复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次,但不是问题,我想过滤掉重复的模式)

2 个答案:

答案 0 :(得分:1)

该链接非常有用,我可以使用它从原始表达式创建正则表达式。

^(?:(?!(?<char>[a-zA-Z\d]+)\k<char>{3,}).)+$ 

^(?:(?!([a-zA-Z\d]+)\1{3,}).)+$ 

REY

答案 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--

它将为正则表达式电机提供大量工作,因为模式的原理是,对于它所经过的字符串的每个字符,它必须验证在剩余序列中未找到当前字符三次跟随当前字符的字符 但它显然有效。