正则表达式匹配JAVA中的斜杠

时间:2012-08-03 04:57:03

标签: java regex

我希望在特定字符串中匹配正斜杠/或反斜杠\,例如:
1. Hi/Hello/Bye/
2. Hi\Hello\Bye\
3. Hi\Hello/Bye\
4. HiHelloBye
在给定的字符串中,不应匹配最后一条记录,因为它不包含/\

我正在使用

if (strFile.matches(".*//.*"))
{
    //String Matches.
}
else
{
    //Does not match.
}

仅匹配正斜杠/。我不知道如何为斜杠(OR条件)编写正则表达式。

4 个答案:

答案 0 :(得分:31)

你想要匹配的“角色”是:

"[/\\\\]"

首先为字符串复制反斜杠,然后再为正则表达式重复。

当你需要在使用反斜杠转义字符串的语言中使用反斜杠时,这可能是最糟糕的正则表达式。

Java编译器在源代码中看到字符串"\\\\"并实际将其转换为"\\"(因为它使用\作为转义字符)。

然后正则表达式会看到"\\",因为它还使用\作为转义字符,会将其视为单个\字符。

  

正如刘妍在评论中指出的那样,你可以使用以下方法之一摆脱一个级别的反斜杠(正则表达式):

".*[/\\x5c].*"
".*[/\\u005c].*"
  

这可能会使其更具可读性。

完成所有减少后,您已指定一个由两个斜杠组成的字符类,如果所讨论的字符与其中任何一个匹配,则返回true。

以下代码显示了这一点:

public class testprog {
    public static void checkString (String s) {
        boolean yes = s.matches(".*[/\\\\].*");
        System.out.println ("'" + s + "': " + yes);
    }

    public static void main (String s[]) {
        checkString ("Hi/Hello/Bye/");
        checkString ("Hi\\Hello\\Bye\\");
        checkString ("Hi\\Hello/Bye\\");
        checkString ("HiHelloBye");
    }
}

并输出:

    'Hi/Hello/Bye/': true
    'Hi\Hello\Bye\': true
    'Hi\Hello/Bye\': true
    'HiHelloBye': false

答案 1 :(得分:2)

你想:

strFile.matches(".*[/\\\\].*")

具体而言,将//替换为[/\\\\]

你只需要一个正斜杠,但你需要4个反斜杠,因为一个是字符串中的一个转义,而2是正则表达式的转义,所以你需要4个。

答案 2 :(得分:2)

使用此...

[ ]将为您提供 OR 功能。

Pattern pat = Pattern.compile("[/\\\\]");
Matcher m = pat.matcher("Hi/Hello/Bye/");

while (m.find()){

    System.out.println(m.group());
}

答案 3 :(得分:0)

使用交替:strFile.matches(".*(/|\\\\).*")匹配正斜杠或反斜杠。您可能需要查看Java regex documentation