String#start_with? return wrong result for Regexp patterns containing /\K/
ruby 2.8.0dev (2020-08-13T01:14:20Z master 69b5241c36) [x86_64-linux]
String#start_with? unexpectedly reports true when the pattern Regexp contains
/\K/ (lookbehind) operator and the lookbehind pattern matches the beginning of
"hello".start_with?(/h\Ke/) # => true (unexpected)
In this example,
/h\Ke/ matches "hello", but it's not considered as a match at the beginning of the string by the other Regexp operations (e.g.
$~.begin(0) == 1).
Actions #1 [ruby-core:99581]
Updated by hanazuki (Kasumi Hanazuki) almost 3 years ago
Actions #2 [ruby-core:108972]
Updated by mame (Yusuke Endoh) 12 months ago
- Status changed from Open to Rejected
\K changes the start position of the match string, but it does not change the match position itself. Actually,
"hello" =~ /h\Ke/ returns 0. (Note that
Regexp#=~ return the start position of the match.)
irb(main):001:0> "hello" =~ /h\Ke/ => 0 irb(main):002:0> $~.begin(0) => 1
So I think this is by design.