Ruby 关于非贪婪正则表达式匹配的一些困惑

Ruby 关于非贪婪正则表达式匹配的一些困惑,ruby,regex,Ruby,Regex,我写了一段ruby代码,如下所示 #! /usr/bin/ruby s = "[[abc]]" if(s =~ /\[(.+)*?\]/) puts $1 end if(s =~ /\[(.+?)\]/) puts $1 end 其产出是: [abc [abc 然后我改变变量s s = "[[abc]]]" 其余部分保持不变,但现在结果是 [abc] [abc 为什么会发生这种情况?有人能给我解释一下吗?

我写了一段ruby代码,如下所示

  #! /usr/bin/ruby
    s = "[[abc]]"  
    if(s =~ /\[(.+)*?\]/)
        puts $1
    end
    if(s =~ /\[(.+?)\]/)
        puts $1
    end
其产出是:

[abc
[abc
然后我改变变量s

  s = "[[abc]]]"
其余部分保持不变,但现在结果是

[abc]
[abc

为什么会发生这种情况?有人能给我解释一下吗?

我不确定这里是否有人能解释这种行为。我在那里检查了一下,正则表达式的行为就像你期待的那样

但是

这只是一个非常糟糕的设计表达。
(.+)*
应该匹配什么?这是嵌套量词,它可以在许多变体中找到有效匹配。更糟糕的是,让外部量词变懒,会发生什么

如果你想有贪婪的匹配使用

\[(.+)\]
如果要进行惰性匹配,请使用

\[(.+?)\]

但千万不要嵌套量词,这样他们就可以找到许多可能的解决方案,这导致了,或者在这里看到一个

我认为这可能与+?和*?这两个非贪婪量词?我从未使用过ruby,但您的正则表达式不是非贪婪的。
+
最终仍然是贪婪的。@npinti那么为什么在案例2中它与[abc]不匹配,就像在贪婪案例中一样?
\[(.+?)\]