我有一组正则表达式字符串。其中一个必须匹配给定java文件中找到的任何字符串。
这是我到目前为止的正则表达式字符串:"(\").*[^\"].*(\")"
但是,即使字符串中的引号被转义,字符串"Hello\"good day"
也会被拒绝。我认为当我在里面找到一个引号而不管它是否被转义时,我立即拒绝了字符串文字。我需要它接受带有转义引号的字符串文字,但它应该拒绝"Hello"Good day"
。
Pattern regex = Pattern.compile("(\").*[^\"].*(\")", Pattern.DOTALL);
Matcher matcher = regex.matcher("Hello\"good day");
matcher.find(0); //false
答案 0 :(得分:13)
在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