Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 - Fatal编程技术网

匹配一个反斜杠的Java正则表达式

匹配一个反斜杠的Java正则表达式,java,regex,Java,Regex,嗨,我正在尝试做一个常规的表达式,它只匹配一次“\”,所以我可以检测到一个目录级别。这个例子不起作用,我不知道Java中的常规表达式 String input=“C:\\andres\\an”; //字符串输入=“C:\\andres”; Pattern p=Pattern.compile(“\\{1}”); 匹配器m=p.Matcher(输入); if(m.find()){ System.out.println(“La cadena SI contiene un caracter\\”; 系统

嗨,我正在尝试做一个常规的表达式,它只匹配一次“\”,所以我可以检测到一个目录级别。这个例子不起作用,我不知道Java中的常规表达式

String input=“C:\\andres\\an”;
//字符串输入=“C:\\andres”;
Pattern p=Pattern.compile(“\\{1}”);
匹配器m=p.Matcher(输入);
if(m.find()){
System.out.println(“La cadena SI contiene un caracter\\”;
系统输出打印项次(输入);
}否则{
System.out.println(“La cadena no contiene un caracter\\”;
系统输出打印项次(输入);
}
}

我会使用这种模式:

^(?!.*\\.*\\).*\\.*$
此正则表达式声明不会出现两个(或更多)反斜杠。然后,它继续匹配一个反斜杠。在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");
}

在反斜杠上拆分时,只有一个反斜杠的匹配路径应该正好有两个结果项。

使用一个反斜杠字符类regex,您可以很容易地做到这一点:

^[^\\]*\\[^\\]*$ 
在Java正则表达式中,字符串应为:

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

正则表达式详细信息:

  • ^
    :开始
  • [^\\]*
    :再匹配0个非
    \
  • \\
    :匹配单个
    \
  • [^\\]*
    :再匹配0个非
    \
  • $
    :结束
PS:如果您在
.matches()
方法中使用此正则表达式,则不需要锚定
^
$
,您可以使用:

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