#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");
}
Соответствующий путь, имеющий только одну обратную косую черту, при разделении на обратную косую черту должен содержать ровно два результирующих термина.