正在使用\\\\&引用;匹配'\';使用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
修饰符的语言中,它们才是真正难看的。因为你并不总是尝试匹配一个斜杠。他试图说,当你试图用一个斜杠来匹配某个东西时,你需要在字符串中使用四个斜杠。他实际上指的是反斜杠,而不是正斜杠……我的答案仍然有效,可能会出现转义-现在更改,以反映更改后的问题。对不起,我在问题中没有说清楚,我要的不仅仅是一个反斜杠。正则表达式的其他部分恰好是可读的,所以我从示例代码中省略了它们。