Java-Регулярное выражение для сопоставления с одним обратным уклоном

#java #regex

#java #регулярное выражение

Вопрос:

Привет, я пытаюсь выполнить регулярное выражение, которое соответствует одному и только одному разу «», чтобы я мог определить один уровень каталога, этот пример не работает, я не знаю очень регулярного выражения на 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);
    }
}
  

Ответ №1:

Вы можете сделать это легко, используя регулярное выражение класса отрицаемых символов:

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

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

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

Демонстрация регулярных выражений

Подробности регулярного выражения:

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

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

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

Ответ №2:

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

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

Это регулярное выражение утверждает, что две (или более) обратные косые черты не отображаются. Затем выполняется сопоставление с одной обратной косой чертой. В коде 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");
}
  

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