Issue #4044 has been updated by Ken Takata.


I have updated [ruby-2.x branch](https://github.com/k-takata/Onigmo/tree/ruby-2.x) in my Onigmo repository.
I think this bug is fixed now.

`(?i)[\p{ASCII}]`, `(?i)[[:ascii:]]`, `(?ia)[\w]`, other POSIX classes with `(?ia)` flags and their negated patterns should not be case folded across ASCII/non-ASCII boundary.
So I make another char class which doesn't include those special patterns. When case folding the original char class,
each character is checked whether it is contained in the special char class.

See also https://github.com/k-takata/Onigmo/issues/4 .
Test patterns are listed. (And more detail is written in Japanese ;-))

----------------------------------------
Bug #4044: Regex matching errors when using \W character class and /i option
https://bugs.ruby-lang.org/issues/4044#change-48265

* Author: Ben Hoskings
* Status: Feedback
* Priority: Normal
* Assignee: Yui NARUSE
* Category: core
* Target version: next minor
* ruby -v: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]
* Backport: 
----------------------------------------
=begin
 Hi all,
 
 Josh Bassett and I just discovered an issue with regex matches on ruby-1.9.2p0. (We reduced it while we were hacking on gemcutter.)
 
 The case-insensitive (/i) option together with the non-word character class (\W) match inconsistently against the alphabet. Specifically the regex doesn't match properly against the letters 'k' and 's'.
 
 The following expression demonstrates the problem in irb:
 
     puts ('a'..'z').to_a.map {|c| [c, c.ord, c[/[^\W]/i] ].inspect }
 
 As a reference, the following two expressions are working properly:
 
     puts ('a'..'z').to_a.map {|c| [c, c.ord, c[/[^\W]/] ].inspect }
     puts ('a'..'z').to_a.map {|c| [c, c.ord, c[/[\w]/i] ].inspect }
 
 Cheers
 Ben Hoskings & Josh Bassett
=end




-- 
https://bugs.ruby-lang.org/