22

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

我正在使用什么

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

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

4

4 回答 4

37

您要匹配的“角色”将是:

"[/\\\\]"

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

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

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

它输出:

    '嗨/你好/再见/':真
    '嗨\你好\再见\':真
    '嗨\你好/再见\':真
    “你好再见”:假
于 2012-08-03T04:59:54.480 回答
4

你要:

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

具体来说,替换//[/\\\\].

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

于 2012-08-03T05:01:26.843 回答
2

Use alternation: strFile.matches(".*(/|\\\\).*") matches either a forward or backward slash. You might want to take a look at the Java regex documentation.

于 2012-08-03T05:03:40.367 回答
2

用这个...

[ ]将为您提供OR功能。

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

while (m.find()){

    System.out.println(m.group());
}
于 2012-08-03T05:09:41.370 回答