gpt4 book ai didi

ruby - Ruby lookbehind 断言 (1.9/2.0) 中是否存在错误?

转载 作者:数据小太阳 更新时间:2023-10-29 06:24:38 26 4
gpt4 key购买 nike

为什么正则表达式不 (?<=fo).*匹配foo (而 (?<=f).* 是)?

"foo" =~ /(?<=f).*/m          => 1
"foo" =~ /(?<=fo).*/m => nil

这似乎只在打开单行模式时发生(点匹配换行符);没有它,一切正常:

"foo" =~ /(?<=f).*/           => 1
"foo" =~ /(?<=fo).*/ => 2

在 Ruby 1.9.3 和 2.0.0 上测试。

See it on Rubular

编辑:更多观察:

添加行尾 anchor 不会改变任何东西:

"foo" =~ /(?<=fo).*$/m        => nil

但是与惰性量词一起,它“有效”:

"foo" =~ /(?<=fo).*?$/m       => 2

编辑:还有一些观察结果:

.+与其等价物一样工作 {1,}但仅限于 Ruby 1.9(在这种情况下,这似乎是两者之间唯一的行为差异):

"foo" =~ /(?<=fo).+/m         => 2
"foo" =~ /(?<=fo).{1,}/ => 2

在 Ruby 2.0 中:

"foo" =~ /(?<=fo).+/m         => nil
"foo" =~ /(?<=fo).{1,}/m => nil

.{0,}被破坏(在 1.9 和 2.0 中):

"foo" =~ /(?<=fo).{0,}/m      => nil

但是{n,m}适用于:

"foo" =~ /(?<=fo).{0,1}/m     => 2
"foo" =~ /(?<=fo).{0,2}/m => 2
"foo" =~ /(?<=fo).{0,999}/m => 2
"foo" =~ /(?<=fo).{1,999}/m => 2

最佳答案

这已被正式分类as a bug and subsequently fixed ,以及另一个有关多行字符串中的 \Z anchor 的问题。

关于ruby - Ruby lookbehind 断言 (1.9/2.0) 中是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com