java - 正则表达式?对于一组词

标签 java regex regex-group

我想为 NAME;NAME;NAME 和 NAME;NAME;NAME;NAME 设置一个正则表达式,其中 NAME 的第四次出现是可选的。
我有一个正则表达式 (.+);(.+);(.+) 匹配第一个模式但不匹配第二个。我试过玩?但它不适用于 (.+);(.+);(.+)(;(.+))?
基本上,我想实现第四个 (.+) 为零或一次出现。

最佳答案

使用 .+匹配任何字符 1+ 次,包括 ;如果要匹配由 ; 分隔的 3 或 4 个组。不包括它,你可以使用 negated character class [^;]+在模式的末尾有一个可选的组。

^([^;]+);([^;]+);([^;]+)(?:;([^;]+))?$
  • ^字符串开头
  • ([^;]+);([^;]+);([^;]+)捕获匹配除 ; 之外的任何字符的组 1、2 和 3
  • (?:非捕获组
  • ;([^;]+)匹配 ;并捕获除 ; 之外的任何字符第 4 组

  • )?关闭组并使其成为可选
  • $字符串结束

  • Regex demo

    如果中间的部分不能包含 ;您还可以使用 split 并计算零件的数量。
    String arr[] = { "NAME;NAME;", "NAME;NAME;NAME", "NAME;NAME;NAME;NAME", "NAME;NAME;NAME;NAME;NAME" };
    
    for (String s  : arr) {
        String [] parts = s.split(";");
        if (parts.length == 3 || parts.length == 4) {
            System.out.println(s);
        }
    }
    
    输出
    NAME;NAME;NAME
    NAME;NAME;NAME;NAME
    

    关于java - 正则表达式?对于一组词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67355058/

    相关文章:

    组内的 Java 正则表达式组

    正则表达式 - 在组之后追加,将内容保留在中间

    java - MOXy Dynamix JAXB 上下文解码到错误的属性名称

    java - Java.math.BigInteger.and() 是如何工作的?

    java - Bigquery 查询 API - 数组问题

    regex - linux中目录的半复杂重组

    java.lang.NoSuchMethodError : org. hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/classic/Session;

    Java - 如果单词以用户输入的定界符结尾,则执行 x

    regex - 我怎样才能让 sed 只匹配第一次出现的字符?

    php - 如何使用正则表达式检查字符串是否采用正确的数组格式?