用于Windows文件路径的Java正则表达式

时间:2014-04-01 13:08:37

标签: java regex escaping

我正在尝试构建一个Java正则表达式来搜索.txt文件以获取Windows格式的文件路径,但是,由于文件路径包含文字反斜杠,我的正则表达式失败了。

.txt文件包含以下行:

C\Windows\SysWOW64\ntdll.dll

但是,文本文件中的某些文件名的格式如下:

C\Windows\SysWOW64\ntdll.dll (some developer stuff here...)

所以我无法使用String.equals

要匹配此行,我正在使用正则表达式:

filename = "C\\Windows\\SysWOW64\\ntdll.dll"
read = BufferedReader.readLine();

if (Pattern.compile(Pattern.quote(filename), Pattern.CASE_INSENSITIVE).matcher(read).find()) {

我尝试使用replace方法转义文字反斜杠,即:

filename.replace("\\", "\\\\");

然而,这是未能找到的,我猜这是因为我需要在构建Pattern之后进一步逃避反斜杠,我想我可能需要逃避另外四个反斜杠,即:< / p>

Pattern.replaceAll("\\\\", "\\\\\\\\");

但是,每次尝试时,模式都不匹配。我确定这是反斜杠的问题,但我不知道在哪里做替换,或者是否有更好的方法来构建模式。

我认为问题进一步复杂化,因为replaceAll方法也使用正则表达式,意味着模式将在其中具有自己的反斜杠,以处理不区分大小写。

任何意见或建议都将受到赞赏。

由于

3 个答案:

答案 0 :(得分:2)

好像你试图将String与另一个进行直接比较。对于完全匹配,你可以做(​​

if (read.equalsIgnoreCase(filename)) {

简单

if (read.startsWith(filename)) {

答案 1 :(得分:1)

试试这个:

  

从文件中读取每一行时,请替换&#39; \&#39;通过&#39; \\&#39;。

然后:

String lLine = "C\\Windows\\SysWOW64\\ntdll.dll";
Pattern lPattern = Pattern.compile("C\\\\Windows\\\\SysWOW64\\\\ntdll\\.dll");
Matcher lMatcher = lPattern.matcher(lLine);
if(lMatcher.find()) {
    System.out.println(lMatcher.group());
}

lLine = "C\\Windows\\SysWOW64\\ntdll.dll (some developer stuff here...)";
lMatcher = lPattern.matcher(lLine);
if(lMatcher.find()) {
    System.out.println(lMatcher.group());
}

答案 2 :(得分:0)

正确的用法是:

String filename = "C\\Windows\\SysWOW64\\ntdll.dll";
String file = filename.replace('\\', ' ');