有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java正则表达式负前瞻未正常工作

我正在努力创建一个正则表达式来验证一个字符串是否以X个字符(同一个)的序列结尾

例如:x=5

1xxxxx - should fail
1xxx - should pass

到目前为止,我的正则表达式:1(?!\\w\1{4})不起作用。在这两种情况下都返回false

谢谢


共 (2) 个答案

  1. # 1 楼答案

    您需要添加字符串结束锚定:

    1(?!.*(.)\1{4,}$).*$
    
  2. # 2 楼答案

    这是一个困难的问题,但如果问题中的条件是正确的,“字符串不以X字符序列结尾”,这应该可以做到:

    (?:(.)(?:(?:(?!\1).){1,4})|^(.)\2{0,3})$
    

    基本上,在一个非捕获组内有两种可能的改变(?:-)

    最后一部分-^(.)\2{0,3}只是测试它是否是一个完整的字符串,只包含一个字符,长度小于五个字符

    第一部分-(.)(?:(?:(?!\1).){1,4})通过捕获一个字符,并通过反向前瞻确保它与下一个字符不匹配来检查字符的变化,下一个字符与.匹配,并测试重复次数少于四次

    这两种改变都是针对组外的字符串结尾$进行测试的

    Check it out here at regex101