嗨,我正在尝试进行一次仅与“ \”匹配一次的常规表达式,因此我可以检测到一个目录级别,此示例不起作用,我不知道Java中的常规表达式。
String input="C:\\andres\\an";
// String input="C:\\andres";
Pattern p = Pattern.compile("\\\\{1}");
Matcher m = p.matcher(input);
if (m.find()) {
System.out.println("La cadena SI contiene un caracter \\");
System.out.println(input);
}else {
System.out.println("La cadena no contiene un caracter \\");
System.out.println(input);
}
}
答案 0 :(得分:3)
您可以使用否定的字符类正则表达式轻松完成此操作:
^[^\\]*\\[^\\]*$
在Java正则表达式中,字符串为:
final String regex = "^[^\\\\]*\\\\[^\\\\]*$";
RegEx详细信息:
^
:开始[^\\]*
:再匹配0个不是\
的字符\\
:匹配单个\
[^\\]*
:再匹配0个不是\
的字符$
:结束 PS::如果您在.matches()
方法中使用此正则表达式,则不需要锚点^
和$
,而可以使用:>
final String regex = "[^\\\\]*\\\\[^\\\\]*";
答案 1 :(得分:2)
我会使用这种模式:
^(?!.*\\.*\\).*\\.*$
此正则表达式断言不会出现两个(或更多)反斜杠。然后,它继续匹配单个反斜杠。在Java代码中:
String input = "C:\\andres";
if (input.matches("(?!.*\\\\.*\\\\).*\\\\.*")) {
System.out.println("MATCH");
}
但是,String#split
可能提供了更简单的方法:
String input = "C:\\andres";
if (input.split("\\\\").length == 2) {
System.out.println("MATCH");
}
在反斜杠上分割时,只有一个反斜杠的匹配路径应具有两个结果项。