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