在以下正则表达式中:
[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 个反斜杠,所以这是一个语法错误]
结束字符类)
端组*
任意数量的\"
字面引用"
总之,这意味着:引号之间的任意数量的点(包括零点)
字符类试图不贪婪,但有一种更简单的方法可以做到这一点 - 只需使用“非贪婪”运算符*?
。即它可以被替换为:
\"\\.*?\"