有没有办法让红宝石1.9 unicode正则表达式行为在红宝石1.8(与轨道2.3)?
问题描述:
我想从字符串的开头和结尾去掉非单词字符。我目前得到的功能是:有没有办法让红宝石1.9 unicode正则表达式行为在红宝石1.8(与轨道2.3)?
$KCODE='UTF-8'
...
def clean_string str
str && str.gsub(/\s+/msiu, ' ').gsub(/\A\W*|\W*\Z/msiu,'')
end
它在大多数情况下都可以使用,但它在磅的标志上失效。
>> puts clean_string('£5.00')
£5.00
我读过,在红宝石1.8这是每规格的行为;所有非ascii字符都被认为是单词字符。但这不是我想要的行为;我只希望单词字符被认为是单词字符,因为它们是1.9中的红宝石。
有没有办法在ruby 1.8(使用rails 2.3.10)中获得ruby 1.9 unicode regex行为?
答
我终于发现,您可以在使用做:
require 'oniguruma'
def clean_string str
squishy_regexp = Oniguruma::ORegexp.new('\s+', 'msi', 'utf8')
clean_regexp = Oniguruma::ORegexp.new('^\W*|\W*$', 'msi', 'utf8')
if str
str = squishy_regexp.gsub(str, ' ')
str = clean_regexp.gsub(str, '')
end
str
end
>> puts clean_string('£5.00')
5.00