Ваш вопрос немного неограничен, и я не знаю точного контекста, в котором вы планируете использовать регулярное выражение.Предполагая, что вы буквально хотите сопоставить только целую строку, состоящую из четного или нечетного числа обратных косых черт, за которым следует некоторое содержимое, вы можете использовать шаблон:
(?<=\s|^)(?:\\{2})*(\*)(?=\s|$)
Это будет соответствовать только четному числуведущие обратные слеши.Ниже я использую формальное сопоставление с образцом, потому что оно позволяет нам изящно обрабатывать случай, когда совпадение не найдено.
String input = "Hello World! \\\\\\\\* more content here? \\\\*";
String pattern = "(?<=\\s|^)(?:\\\\{2})*(\\*)(?=\\s|$)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
boolean found = false;
while (m.find()) {
found = true;
System.out.println(m.group(1));
}
if (!found) {
System.out.println("No match");
}
Вывод:
*
*
(two asterisks found in the input)
Обратите внимание, чтоиспользование String#replaceAll
не так хорошо, как описано выше, поскольку в случае несоответствия оно вернет исходную входную строку.