Project

General

Profile

Actions

Bug #17120

closed

String#start_with? return wrong result for Regexp patterns containing /\K/

Added by hanazuki (Kasumi Hanazuki) over 3 years ago. Updated almost 2 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.8.0dev (2020-08-13T01:14:20Z master 69b5241c36) [x86_64-linux]
[ruby-core:99580]

Description

String#start_with? unexpectedly reports true when the pattern Regexp contains /\K/ (lookbehind) operator and the lookbehind pattern matches the beginning of self.

"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).

Updated by mame (Yusuke Endoh) almost 2 years 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0