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

Regex 如果没有重复,将匹配的正则表达式,regex,validation,non-repetitive,Regex,Validation,Non Repetitive,我想构造正则表达式,如果没有重复4次或更多次的字符,它将匹配密码 我提出了一个正则表达式,如果有字符或字符组重复4次,它将匹配: (?:([a-zA-Z\d]{1,})\1\1\1) 只有当字符串不包含重复项时,有没有办法匹配?我尝试了中建议的方法,因为我认为正面/负面的表情组合会让我成功。但我还没有找到有效的例子 重复是指字符串中任意数量的字符 示例-不应匹配 aaxbc 阿巴巴布 X14AABC 示例-应匹配 阿博卡萨兹 (a在这里出现了4次,但这不是问题,我想过滤掉重复的模式) 这个链接

我想构造正则表达式,如果没有重复4次或更多次的字符,它将匹配密码

我提出了一个正则表达式,如果有字符或字符组重复4次,它将匹配:

(?:([a-zA-Z\d]{1,})\1\1\1)
只有当字符串不包含重复项时,有没有办法匹配?我尝试了中建议的方法,因为我认为正面/负面的表情组合会让我成功。但我还没有找到有效的例子

重复是指字符串中任意数量的字符

示例-不应匹配 aaxbc 阿巴巴布 X14AABC 示例-应匹配 阿博卡萨兹 (a在这里出现了4次,但这不是问题,我想过滤掉重复的模式)
这个链接非常有用,我可以使用它从原始表达式创建正则表达式

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

没有好处:此解决方案不能准确回答问题,它相对于所表达的需求来说做得太多了

----- 在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--
它将给正则表达式引擎带来大量的工作,因为模式的原理是,对于它运行的字符串的每个字符,它必须验证当前字符在当前字符后面的剩余字符序列中没有找到其他三次。

但是它显然是有效的。

你能用你的问题中的一些例子来解释吗?只有在字符串后面或字符串的任何地方才考虑重复?你的思路是正确的:在正则表达式中,负环视通常是处理这种情况的方式。不适用于“或一组字符”的问题。把你的小提琴放进去:等等,它会匹配的。你的例子看起来很好用。我将把它更新为^(?:(?!([a-zA-Z\d]+)\1{3,})。+$以支持多个字符的重复。谢谢我想让你解释一下
\k
的角色是什么,我不明白。我练习Python。是用另一种语言吗?是的,使用命名引用是另一种风格。我只是在做反向引用时倾向于这样做,因为我在其他方面会感到困惑。在python中,它是(?P=name),您可能希望更新答案以反映OP的请求,从而避免重复多字符序列。
:1*2-3=4@
:1*1-3=4@5
:1*1-1=4@5!6
--No match--
--No match--