【问题标题】:Is using "\\\\" to match '\' with Regex in Java the most Readable Way?在 Java 中使用“\\\\”将 '\' 与 Regex 匹配是最易读的方式吗?
【发布时间】:2010-03-23 22:28:25
【问题描述】:

我知道以下内容可行,但可读性不高,有什么方法可以在不添加注释的情况下使其在代码本身中更具可读性?

//Start her off
String sampleregex = "\\\\";
if (input.matches(sampleregex))
   //do something
//do some more

【问题讨论】:

  • 正则表达式几乎总是丑陋的。了解这一点并继续前进。
  • @Savvas 是的,我的意思是谢谢你,编辑问题来解决这个问题。
  • @Bryon 这似乎是迄今为止最好的答案,为什么不让它成为官方答案,因为它似乎很受欢迎
  • Really formulate questions this way? Really?
  • @Byron 在坚持双引号且不支持/x 修饰符的语言中,它们只是真正丑陋。

标签: java regex readability


【解决方案1】:

为什么不

if (input.contains("\\")) {
}

因为您似乎只是在寻找反斜杠?

【讨论】:

  • 因为您并不总是尝试匹配单个斜杠。他试图说,当你尝试用一个斜线匹配某些东西时,你需要在字符串中使用 4 个。他实际上是指反斜杠而不是正斜杠......
  • 我的答案仍然有效,但要进行 \ 转义 - 现在已更改以反映更改后的问题。
  • 对不起,我没有在问题中说清楚,我正在寻找的不仅仅是一个单一的反斜杠。正则表达式的其他部分恰好是可读的,所以我从示例代码中省略了它们。
【解决方案2】:

假设您的意思是 "\\\\" 而不是 "////"

您可以使用\Q\E 将其转义,这会删除一层反斜杠:"\\Q\\\E",但这并没有那么好。您还可以使用Pattern.quote("\\") 在运行时将其转义。但就个人而言,我会坚持使用"\\\\"

(顺便说一句,您需要其中四个,因为\ 用于转义正则表达式引擎和 Java 字符串中的内容,因此您需要转义一次,以便正则表达式引擎知道您没有尝试转义其他任何内容(即\\);然后您需要转义这两个,以便Java 知道您没有转义字符串中的某些内容(即\\\\))。

【讨论】:

    【解决方案3】:

    / 不是正则表达式元字符,因此正则表达式字符串 "/" 匹配单个斜杠,"////" 匹配连续四个。

    我想您的意思是要询问匹配单个反斜杠而不是正斜杠,在这种情况下,不,您需要将 "\\\\" 放入您的正则表达式字符串文字中以匹配单个反斜杠。 (而且我需要输入八个才能让四个出现在 SO--该死的!)

    【讨论】:

      【解决方案4】:

      我的解决方案类似于 Soldier.moth 的解决方案,但有所不同。创建一个包含常用正则表达式的常量文件并不断添加。作为常量的表达式甚至可以组合起来,为构建正则表达式提供一个抽象层,但最终它们仍然经常会变得混乱。

      public static final String SINGLE_BACKSLASH = "\\\\";
      

      【讨论】:

        【解决方案5】:

        我想到的一个解决方案是这样做

        String singleSlash = "\\\\";
        if(input.matches(singleSlash))
           //...
        

        【讨论】:

          【解决方案6】:

          为您的变量和常量使用更好的名称,并逐步组合它们是不用 cmets 的好方法,例如:

          final string backslash = "\\";
          final string regexEscapedBackslash = backslash + backslash;
          
          if (input.matches(regexEscapedBackslash)) {
              ...
          

          【讨论】:

            猜你喜欢
            • 2012-09-22
            • 2013-01-29
            • 1970-01-01
            • 1970-01-01
            • 2018-04-06
            • 2022-06-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多