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

时间:2016-05-04 15:53:24

标签: java regex regex-greedy

我有一组正则表达式字符串。其中一个必须匹配给定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 个答案:

答案 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

RegEx Demo