您希望匹配的“角色”是:
"[/\\\\]"
首先为字符串复制反斜杠,然后再次为正则表达式复制反斜杠。
当您需要在也使用反斜杠来转义字符串的语言中使用反斜杠时,这可能是最讨厌的正则表达式。
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