From: "mame (Yusuke Endoh) via ruby-core" Date: 2025-07-11T03:36:27+00:00 Subject: [ruby-core:122723] [Ruby Bug#21507] Regexp considers variable repetition quantifiers invalid in lookbehind Issue #21507 has been updated by mame (Yusuke Endoh). Status changed from Open to Feedback This is currently an intended implementation limitation. This behavior comes from the specifications of Onigmo, which Ruby's regular expression engine is based on. The Onigmo documentation states the following about look-behinds: ``` (?<=subexp) look-behind (? "axb".split /(?=x)/ => ["a", "xb"] irb(main):101> "axb".split /(?=x?)/ => ["a", "x", "b"] irb(main):102> "axb".split /(?=x+)/ => ["a", "xb"] irb(main):103> "axb".split /(?=x*)/ => ["a", "x", "b"] irb(main):104> "axb".split /(?=x{1,})/ => ["a", "xb"] irb(main):105> "axb".split /(?=x{,1})/ => ["a", "x", "b"] irb(main):106> "axb".split /(?=x{1,2})/ => ["a", "xb"] ``` Examples of lookbehind **working only with non-variable metacharacters**: ```ruby irb(main):107> "axb".split /(?<=x)/ => ["ax", "b"] irb(main):108> "axb".split /(?<=x?)/ /var/lib/gems/3.0.0/gems/irb-1.14.0/exe/irb:9:in `': (irb):108: invalid pattern in look-behind: /(?<=x?)/ (SyntaxError) from /usr/local/bin/irb:25:in `load' from /usr/local/bin/irb:25:in `
' irb(main):109> "axb".split /(?<=x*)/ /var/lib/gems/3.0.0/gems/irb-1.14.0/exe/irb:9:in `': (irb):109: invalid pattern in look-behind: /(?<=x*)/ (SyntaxError) from /usr/local/bin/irb:25:in `load' from /usr/local/bin/irb:25:in `
' irb(main):110> "axb".split /(?<=x{1,})/ /var/lib/gems/3.0.0/gems/irb-1.14.0/exe/irb:9:in `': (irb):110: invalid pattern in look-behind: /(?<=x{1,})/ (SyntaxError) from /usr/local/bin/irb:25:in `load' from /usr/local/bin/irb:25:in `
' irb(main):111> "axb".split /(?<=x{,1})/ /var/lib/gems/3.0.0/gems/irb-1.14.0/exe/irb:9:in `': (irb):111: invalid pattern in look-behind: /(?<=x{,1})/ (SyntaxError) from /usr/local/bin/irb:25:in `load' from /usr/local/bin/irb:25:in `
' irb(main):112> "axb".split /(?<=x{1,2})/ /var/lib/gems/3.0.0/gems/irb-1.14.0/exe/irb:9:in `': (irb):112: invalid pattern in look-behind: /(?<=x{1,2})/ (SyntaxError) from /usr/local/bin/irb:25:in `load' from /usr/local/bin/irb:25:in `
' irb(main):113> "axb".split /(?<=x{1})/ => ["ax", "b"] irb(main):114> "axb".split /(?<=x{1,1})/ => ["ax", "b"] ``` # Note I have searched on the internet and, to my knowledge, this behavior is not intended. (This documentation page on regular expressions)[https://ruby-doc.org/core-3.1.0/doc/regexp_rdoc.html], for example, does not say anything about limitations specific to lookbehinds. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/