Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在使用\\\\&引用;匹配'\';使用Java中的正则表达式是最可读的方式吗?_Java_Regex_Readability - Fatal编程技术网

正在使用\\\\&引用;匹配'\';使用Java中的正则表达式是最可读的方式吗?

正在使用\\\\&引用;匹配'\';使用Java中的正则表达式是最可读的方式吗?,java,regex,readability,Java,Regex,Readability,我知道下面的代码是可行的,但它不是那么可读的,有没有什么方法可以使代码本身更可读,而不添加注释 //Start her off String sampleregex = "\\\\"; if (input.matches(sampleregex)) //do something //do some more 我想到的一个解决办法是 String singleSlash = "\\\\"; if(input.matches(singleSlash)) //... 为什么不呢 if

我知道下面的代码是可行的,但它不是那么可读的,有没有什么方法可以使代码本身更可读,而不添加注释

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

我想到的一个解决办法是

String singleSlash = "\\\\";
if(input.matches(singleSlash))
   //...
为什么不呢

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

由于您看起来只是在查找反斜杠?

/
不是正则表达式元字符,因此正则表达式字符串
“/”
匹配一个斜杠,
“//”
匹配一行中的四个

我想你是想问匹配一个反斜杠,而不是一个正斜杠,在这种情况下,不,你需要在正则表达式字符串文本中放入
“\\\\”
,以匹配一个反斜杠。(我需要输入八,让四个出现在屏幕上——该死!)

假设你的意思是
“\\\\”
,而不是
“///”

您可以使用
\Q
\E
来逃避它,这会删除一层反斜杠:
“\\Q\\\E”
,但这并没有那么好。您还可以使用
Pattern.quote(\\”
在运行时对其进行转义。但就个人而言,我还是坚持使用
“\\\\”


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

我的解决方案与Soldier.moth的类似,但有一点扭曲。创建一个包含公共正则表达式的常量文件,并不断向其中添加。作为常量的表达式甚至可以组合在一起,为构建正则表达式提供一个抽象层,但最终它们仍然常常会变得一团糟

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

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

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

if (input.matches(regexEscapedBackslash)) {
    ...

正则表达式几乎总是难看的。理解这一点,然后继续。@Savvas是的,我的意思是谢谢你,编辑的问题解决了这个问题。@Bryon这似乎是目前为止最好的答案,为什么你不把它作为一个正式的答案,因为它看起来很流行
真的是这样表述问题的?真的吗?
@Byron只有在坚持双引号且不支持
/x
修饰符的语言中,它们才是真正难看的。因为你并不总是尝试匹配一个斜杠。他试图说,当你试图用一个斜杠来匹配某个东西时,你需要在字符串中使用四个斜杠。他实际上指的是反斜杠,而不是正斜杠……我的答案仍然有效,可能会出现转义-现在更改,以反映更改后的问题。对不起,我在问题中没有说清楚,我要的不仅仅是一个反斜杠。正则表达式的其他部分恰好是可读的,所以我从示例代码中省略了它们。