Подтвердить что ты не робот

Регулярное совпадение с косой чертой в JAVA

Я хочу совместить косую черту / или обратную косую черту \ в частности строку для примера:

1. Hi/Hello/Bye/
2. Hi\Hello\Bye\
3. Hi\Hello/Bye\
4. HiHelloBye
В данных строках только последняя запись не должна совпадать, поскольку она не содержит ни /, ни \.

Что я использую

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

Это соответствует только косую черту /. Я не знаю, как писать регулярное выражение для косой черты (для условия OR).

4b9b3361

Ответ 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

Ответ 2

Вы хотите:

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

В частности, заменив // на [/\\\\].

Вам нужна только одна косая черта, но вам нужно 4 обратных слэша, потому что один из них - это побег внутри строки, а 2 - побег для регулярного выражения, поэтому вам нужно 4.

Ответ 3

Используйте это...

[ ] предоставит вам функциональность ИЛИ.

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

while (m.find()){

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

Ответ 4

Использовать чередование: strFile.matches(".*(/|\\\\).*") соответствует либо косой чертой вперед, либо назад. Вы можете взглянуть на документация по Java regex.