Ответ 1
"Символ", который вы хотите совместить, будет следующим:
"[/\\\\]"
дублирует обратную косую черту сначала для строки, а затем снова для регулярного выражения.
Это, пожалуй, самый противный бит регулярных выражений, когда вам нужно использовать обратную косую черту на языках, которые также используют обратную косую черту для экранирования строк.
Компилятор Java видит строку "\\\\"
в исходном коде и фактически превращает ее в "\\"
(так как она использует \
как escape-символ).
Тогда регулярное выражение видит, что "\\"
и, поскольку оно также использует \
в качестве escape-символа, будет рассматривать его как одиночный символ \
.
Как отмечает Лю Янь в комментарии, вы можете избавиться от одного уровня обратных косых черт (регулярного выражения), используя одно из следующих:
".*[/\\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