我正在使用以下正则表达式来获取 /**/ 之间的文本:

(/\*)+(.+)(\*/)

当这只需要发生一次时,这工作正常,例如整个字符串只是
/* hello */
it only needs to capture once

但如果有不止一次需要捕获它,它会抓取介于两者之间的内容,例如:
/* hello */
it only needs to capture more than once [THIS ALSO GET'S HIGHLIGHTED]
/* second time */

为什么会发生这种情况?

最佳答案

因为你在告诉它。默认情况下,正则表达式是贪婪的,这意味着它们会匹配最长的东西。

在 Perl regexp 中,您可以通过以下方式覆盖该行为

(/\*)+(.+?)(\*/)

这 '?'告诉 '+' 匹配最短的字符串,而不是最长的字符串。

关于regex - 捕获两个字母之间的文本时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5730517/

10-16 17:21