Regex для сопоставления строкового литерала в Java?

У меня есть массив строк регулярных выражений. Одна из них должна соответствовать любой строке, найденной в данном файле Java.

Это строка регулярных выражений, которую я имею до сих пор: "(\").*[^\"].*(\")"

Тем не менее, строка "Hello\"good day" отклоняется, даже если кавычка внутри строки экранирована. Я думаю, что то, что у меня есть, сразу отклоняет строковый литерал, когда он находит кавычку внутри, независимо от того, экранирован он или нет. Мне нужно принять строковые литералы с экранированными кавычками, но он должен отклонить "Hello"Good day",

  Pattern regex = Pattern.compile("(\").*[^\"].*(\")", Pattern.DOTALL);
  Matcher matcher = regex.matcher("Hello\"good day");
  matcher.find(0); //false

1 ответ

Решение

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

boolean valid = input.matches("\"[^\"\\\\]*(\\\\.[^\"\\\\]*)*\"");

Используемое регулярное выражение:

^"[^"\\]*(\\.[^"\\]*)*"$

Расставаться:

^             # line start
"             # match literal "
[^"\\]*       # match 0 or more of any char that is not " and \
(             # start a group
   \\         # match a backslash \
   .          # match any character after \
   [^"\\]*    # match 0 or more of any char that is not " and \
)*            # group end, and * makes it possible to match 0 or more occurrances
"             # match literal "
$             # line end

RegEx Demo

Другие вопросы по тегам