3

我知道以下内容有效,但可读性不强,有没有办法在不添加注释的情况下使其在代码本身中更具可读性?

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

6 回答 6

6

为什么不

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

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

于 2010-03-23T22:31:55.320 回答
4

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

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

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

于 2010-03-23T22:36:15.737 回答
2

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

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

于 2010-03-23T22:32:53.057 回答
2

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

public static final String SINGLE_BACKSLASH = "\\\\";
于 2010-03-24T20:57:38.637 回答
1

我想到的一个解决方案是

String singleSlash = "\\\\";
if(input.matches(singleSlash))
   //...
于 2010-03-23T22:29:25.857 回答
0

为变量和常量使用更好的名称,并逐步组合它们是无需注释的好方法,例如:

final string backslash = "\\";
final string regexEscapedBackslash = backslash + backslash;

if (input.matches(regexEscapedBackslash)) {
    ...
于 2020-11-16T10:50:42.930 回答