Java常规表达式来匹配一个backslah

时间:2019-04-24 14:59:17

标签: java regex

嗨,我正在尝试进行一次仅与“ \”匹配一次的常规表达式,因此我可以检测到一个目录级别,此示例不起作用,我不知道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);
    }
}

2 个答案:

答案 0 :(得分:3)

您可以使用否定的字符类正则表达式轻松完成此操作:

^[^\\]*\\[^\\]*$ 

在Java正则表达式中,字符串为:

final String regex = "^[^\\\\]*\\\\[^\\\\]*$";

RegEx Demo

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");
}

在反斜杠上分割时,只有一个反斜杠的匹配路径应具有两个结果项。