\w中也包含日语字符, 所以必须正确地设定$KCODE,或者进行个别指定。(\b是表示\w和\W且宽度为0的正则表达式。)
# 在euc-jp环境下 /a\b/ === 'あaあ' #=> 2 /\ba/ === 'あaあ' #=> nil /\ba/e === 'あaあ' #=> nil /\ba/e === 'あaあ' #=> nil # 在Shift_JIS环境下 /a\b/ === 'あaあ' #=> 3 /\ba/ === 'あaあ' #=> nil /\ba/s === 'あaあ' #=> nil /\ba/s === 'あaあ' #=> nil
因为尚未定义Regexp#eql?和Regexp#hash(而只能使用Object#eql?和Object#hash), 所以并不适合Hash的键。
//.eql? // #=> false 2003-05-07: 现在已经完成了定义。 p(//.eql?(//)) => ruby 1.6.8 (2002-12-24) [i586-linux] false => ruby 1.7.3 (2002-12-11) [i586-linux] false => ruby 1.8.0 (2002-12-31) [i586-linux] true
在编写一个包含某字符串的正则表达式时, 必须Regexp#quote才行。
a = 'a.c'
/^#{a}$/ === 'abc' #=> 0 (已匹配)
/^#{Regexp.quote a}$/ === 'abc' #=> nil (不匹配)
在Perl中,正则表达式$可以匹配字符串尾部"\n"中的2个地方, 而Ruby只会匹配1个地方(但是, ruby 1.8已经修正了这个问题, 变得与Perl一样了。[ruby-dev:20125])
# 在Perl中, $匹配于换行前和字符串尾 % perl -e '$s = "\n"; $s =~ s/$/o/g; print "[$s]\n";' [o o] # 在Ruby中, $只匹配于换行前 % ruby -e '$s = "\n"; $s.gsub!(/$/, "o"); print "[#$s]\n"' [o ] % ruby-1.8.0-2003-05-01 -v -e '$s = "\n"; $s.gsub!(/$/, "o"); print "[#$s]\n"' ruby 1.8.0 (2003-05-01) [i586-linux] [o o]