我知道以下有效,但它不具有可读性,是否有任何方法可以使代码本身更具可读性而无需添加注释?
//Start her off
String sampleregex = "\\\\";
if (input.matches(sampleregex))
//do something
//do some more
答案 0 :(得分:6)
为什么不
if (input.contains("\\")) {
}
因为您似乎只是在寻找反斜杠?
答案 1 :(得分:4)
假设您的意思是"\\\\"
而不是"////"
:
您可以使用\Q
和\E
来移除它,这会删除一层反斜杠:"\\Q\\\E"
,但这并没有那么好。您还可以使用Pattern.quote("\\")
在运行时将其转义。但就个人而言,我只会坚持使用"\\\\"
。
(顺便说一下,你需要其中四个,因为\
用于在正则表达式引擎和Java字符串中转义,所以你需要转义一次所以正则表达式引擎知道你没有尝试scape任何其他东西(所以\\
);然后你需要逃避这两个,所以Java知道你没有逃避字符串中的某些东西(所以\\\\
))。
答案 2 :(得分:2)
/
不是正则表达式元字符,因此正则表达式字符串"/"
匹配单个斜杠,而"////"
连续匹配四个。
我想你想问一下匹配单个反斜杠而不是正斜杠,在这种情况下,不需要,你需要将"\\\\"
放在正则表达式字符串文字中以匹配单个反斜杠。 (我需要输入八个才能让四个出现在SO上 - 该死的!)
答案 3 :(得分:2)
我的解决方案与Soldier.moth类似,但有一点扭曲。创建一个包含常用正则表达式的常量文件,并继续添加它。作为常量的表达式甚至可以组合在一起,为构建正则表达式提供一个抽象层,但最终它们仍然常常变得混乱。
public static final String SINGLE_BACKSLASH = "\\\\";
答案 4 :(得分:1)
我想到的一个解决方案就是
String singleSlash = "\\\\";
if(input.matches(singleSlash))
//...
答案 5 :(得分:0)
为变量和常量使用更好的名称,并逐步编写它们是一种无需注释的好方法,例如:
final string backslash = "\\";
final string regexEscapedBackslash = backslash + backslash;
if (input.matches(regexEscapedBackslash)) {
...