在以下正则表达式中:
[a-zA-Z_]?\"(\\.|[^\\"])*\"
是什么\"(\\.|[^\\"])*\"意思?
这是描述:
[ # start character class
a-zA-Z # case insensitive character match
_ # underscores are allowed too
] # end character class
? # match zero or one time
( # start group
\\. # dot character
| # OR
[ # start character class
^ # match any character
\\" # except double quote
] # end character class
) # end group
* # match zero or more occurrences
它看起来像 java,所以崩溃了
\"(\\.|[^\\"])*\"
我们得到:
\"字面引用"(开始组\\.字面点|逻辑“或”[开始字符类^否定\\"不必要的转义引号 - 相当于\"- 也应该有 3 个或 1 个反斜杠,所以这是一个语法错误]结束字符类)端组*任意数量的\"字面引用"总之,这意味着:引号之间的任意数量的点(包括零点)
字符类试图不贪婪,但有一种更简单的方法可以做到这一点 - 只需使用“非贪婪”运算符*?。即它可以被替换为:
\"\\.*?\"