“。*?”之间的区别是什么?正则表达式中的“[^”] *“

时间:2016-10-24 15:38:06

标签: regex

我是正则表达式的新手。如果我理解正确,两者

".*?"

"[^"]*" 

应返回两个最近引号内的任何字符串(包括引号)。

例如,给出以下字符串

Here are "quote one" and "quote two" 

两个正则表达式返回的结果应该是

  • "quote one"
  • "quote two"

所以在这种情况下我理解两者都是一样的。他们唯一不同的情况是chris85在评论中提到的情景。我是对的吗?

1 个答案:

答案 0 :(得分:2)

这两个正则表达本身实际上是相同的。当它们是更大表达的一部分时,差异开始变得重要。例如,假设您只想匹配第二组引号,因为它位于字符串的末尾。如果你使用".*?"$,你会得到:

"quote one" and "quote two"

...因为.可以匹配引号,并且正则表达式引擎始终采用它找到的第一个匹配项。但是,"[^"]*"$仅匹配:

"quote two"

您可能听说.*?总是返回最短的匹配。正如你刚才所见,那不是真的。你也不应该期望它比.*更有效率;当没有可能的比赛时,他们同样很慢。

*?等不情愿的量词很方便,但是当情况需要时,您应该随时准备使用根据您的需求量身定制的内容,例如[^"]*(?:(?!don't match this).)*