我正在尝试构建一个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方法也使用正则表达式,意味着模式将在其中具有自己的反斜杠,以处理不区分大小写。
任何意见或建议都将受到赞赏。
由于
答案 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('\\', ' ');