【问题标题】:java regex hyphen within string multiple times字符串中的java正则表达式连字符多次
【发布时间】:2019-05-12 13:38:18
【问题描述】:

我有一个 Java 程序,如果它包含超过 5 次的连字符,它应该匹配一个字符串:

hello-hi-contains-more-than-five-hyphen

单词可以包含任何常规字符。

此示例中的正则表达式不应匹配:

hi-hello-233-here-example

我试着写一个这样的正则表达式:

.*-{6,}.*

但它不起作用。

【问题讨论】:

  • 我觉得如果你使用String.split('-')然后检查长度是否大于6会方便很多。
  • 感谢您的建议,但这是我需要的正则表达式的一部分
  • 不使用正则表达式的替代方案:booleam matches = str.codePoints().filter(c -> c == '-').count() > 5;

标签: java regex match


【解决方案1】:

如果您想使用正则表达式,那么您可以尝试以下方法:

^(.*?-){6,}.*$

Live Example

【讨论】:

    【解决方案2】:
    "...".matches("(?s)([^-]*-){6}.*")
    
    • (?s) dot-all、. 也将匹配行分隔符,如 \rn
    • ( ),6次{6},任意字符.0次或多次*
    • 带有字符集[] 的组 ^ 包含-,0 次或多次*,后跟-

    对于matches,正则表达式必须覆盖整个字符串,因此^(开始)和$(结束)已经隐含。 (因此需要.*

    【讨论】:

      【解决方案3】:

      这里不需要昂贵的正则表达式,一个简单的splitlength就可以了,即:

      String subjectString = "hello-hi-contains-more-than-five-hyphen";
      String[] splitArray = subjectString.split("-");
      if(splitArray.length > 5){
          System.out.println(subjectString);
      }
      

      Java Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多