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

2022-09-02 00:46:43

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

我正在使用什么

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

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


答案 1

您希望匹配的“角色”是:

"[/\\\\]"

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

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

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

答案 2

你想要:

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

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

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