我是正则表达式的新手。如果我理解正确,两者
".*?"
和
"[^"]*"
应返回两个最近引号内的任何字符串(包括引号)。
例如,给出以下字符串
Here are "quote one" and "quote two"
两个正则表达式返回的结果应该是
"quote one"
"quote two"
所以在这种情况下我理解两者都是一样的。他们唯一不同的情况是chris85在评论中提到的情景。我是对的吗?
答案 0 :(得分:2)
这两个正则表达本身实际上是相同的。当它们是更大表达的一部分时,差异开始变得重要。例如,假设您只想匹配第二组引号,因为它位于字符串的末尾。如果你使用".*?"$
,你会得到:
"quote one" and "quote two"
...因为.
可以匹配引号,并且正则表达式引擎始终采用它找到的第一个匹配项。但是,"[^"]*"$
仅匹配:
"quote two"
您可能听说.*?
总是返回最短的匹配。正如你刚才所见,那不是真的。你也不应该期望它比.*
更有效率;当没有可能的比赛时,他们同样很慢。
*?
等不情愿的量词很方便,但是当情况需要时,您应该随时准备使用根据您的需求量身定制的内容,例如[^"]*
或(?:(?!don't match this).)*
。