用于匹配 Java 中的字符串文字的正则表达式?

Regex for matching a string literal in 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

在 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