【问题标题】:regular expression to match one or two dots [duplicate]正则表达式匹配一个或两个点[重复]
【发布时间】:2011-04-21 05:17:31
【问题描述】:

什么是正则表达式。还有..?

if(key.matches(".")) {

do something 

}

匹配接受要求正则表达式的字符串。现在我需要删除我的 MAP 中的所有 DOT。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    ...

    [.]{1}
    

    [.]{2}
    

    ?

    【讨论】:

    • 单点代表所有字符不是吗?
    【解决方案2】:

    [+*?.] 大多数特殊字符在方括号内没有意义。此表达式匹配 +、*、? 中的任何一个或点。

    【讨论】:

      【解决方案3】:

      。匹配任何需要转义的字符,即Java字符串中的\.\\.(因为\本身在Java字符串中具有特殊含义。)

      然后您可以使用 \.\.\.{2} 来精确匹配 2 个点。

      【讨论】:

      • \.不适用于 key.matches 中的上述代码
      • 如前所述,\. 是正则表达式,但要在 Java 中为该表达式构造字符串,您将需要 \\.,因为在 Java 字符串中使用 \n、\t 等. 所以 \\ 对于字符串中的文字 \ 是必需的。另外,请注意String.matches 需要正则表达式来匹配 整个 字符串。如果要进行子字符串搜索,则需要使用 Matcher.find
      • 另外,你能澄清一下要求吗?如果您只需要检查密钥是否包含点,那么您可以使用 key.contains 并且根本不需要正则表达式。
      • 您可以使用Pattern#quote(String) 转义保留的正则表达式字符
      • Javascript 也需要转义斜杠('\\.')
      【解决方案4】:

      如果您只想替换字符串中的点,请使用String.Replace()。替代方法是将Pattern-MatcherStringBuilder 一起使用,这为您提供了更大的灵活性,因为您可以找到点之间的组。如果使用后者,我建议您忽略带有"\\.+" 的空条目。

      public static int count(String str, String regex) {
          int i = 0;
          Pattern p = Pattern.compile(regex);
          Matcher m = p.matcher(str);
          while (m.find()) {
              m.group();
              i++;
          }
          return i;
      }
      
      public static void main(String[] args) {
          int i = 0, j = 0, k = 0;
          String str = "-.-..-...-.-.--..-k....k...k..k.k-.-";
      
          // this will just remove dots
          System.out.println(str.replaceAll("\\.", ""));
          // this will just remove sequences of ".." dots
          System.out.println(str.replaceAll("\\.{2}", ""));
          // this will just remove sequences of dots, and gets
          // multiple of dots as 1
          System.out.println(str.replaceAll("\\.+", ""));
      
          /* for this to be more obvious, consider following */
          System.out.println(count(str, "\\."));
          System.out.println(count(str, "\\.{2}"));
          System.out.println(count(str, "\\.+"));
      }
      

      输出将是:

      --------kkkkk--
      -.--.-.-.---kk.kk.k-.-
      --------kkkkk--
      21
      7
      11
      

      【讨论】:

        【解决方案5】:

        你应该使用包含不匹配

        if(nom.contains("."))
            System.out.println("OK");
        else
            System.out.println("Bad");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-01
          • 2020-06-23
          • 2021-06-16
          • 2011-06-10
          • 2012-05-27
          • 2020-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多