Java-Regular Expresion для соответствия с одним обратным слэшем - PullRequest
2 голосов
/ 24 апреля 2019

Привет, я пытаюсь сделать регулярное выражение, которое соответствует одному и только одному разу "\", поэтому я могу обнаружить один уровень каталога, этот пример не работает. Я не знаю очень регулярного выражения в Java.

    String  input="C:\\andres\\an";
//    String  input="C:\\andres";
    Pattern p = Pattern.compile("\\\\{1}");
    Matcher m = p.matcher(input);
    if (m.find()) {
        System.out.println("La cadena SI contiene un caracter \\");
        System.out.println(input);
    }else {
        System.out.println("La cadena no contiene un caracter \\");
        System.out.println(input);
    }
}

Ответы [ 2 ]

3 голосов
/ 24 апреля 2019

Это можно легко сделать с помощью отрицательного регулярного выражения класса символов:

^[^\\]*\\[^\\]*$ 

В Java строка регулярного выражения будет иметь вид:

final String regex = "^[^\\\\]*\\\\[^\\\\]*$";

RegEx Demo

Подробности RegEx:

  • ^: начало
  • [^\\]*: сопоставить еще 0 с любыми символами, которые не \
  • \\: соответствует одному \
  • [^\\]*: соответствует 0 другим символам, которые не \
  • $: конец

PS: Если вы используете это регулярное выражение в методе .matches(), тогда якоря ^ и $ не нужны, и вы можете просто использовать:

final String regex = "[^\\\\]*\\\\[^\\\\]*";
2 голосов
/ 24 апреля 2019

Я бы использовал этот шаблон:

^(?!.*\\.*\\).*\\.*$

Это регулярное выражение утверждает, что две (или более) обратные косые черты не появляются.Затем он продолжается, чтобы соответствовать одной обратной косой черты.В Java-коде:

String input = "C:\\andres";
if (input.matches("(?!.*\\\\.*\\\\).*\\\\.*")) {
    System.out.println("MATCH");
}

Но, String#split может предложить еще более простой способ сделать это:

String input = "C:\\andres";
if (input.split("\\\\").length == 2) {
    System.out.println("MATCH");
}

Соответствующий путь, только с одним обратным слешем, при разбиении на обратный слешдолжно иметь ровно два результирующих члена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...