def natcmp(str2, caseInsensitive=false)
str1 = self.dup
str2 = str2.dup
compareExpression = /^(\D*)(\d*)(.*)$/
if caseInsensitive
str1.downcase!
str2.downcase!
end
str1.gsub!(/\s*/, '')
str2.gsub!(/\s*/, '')
while (str1.length > 0) or (str2.length > 0) do
str1 =~ compareExpression
chars1, num1, str1 = $1.dup, $2.dup, $3.dup
str2 =~ compareExpression
chars2, num2, str2 = $1.dup, $2.dup, $3.dup
case (chars1 <=> chars2)
when 0
if (num1[0] != 48) and (num2[0] != 48)
num1, num2 = num1.to_i, num2.to_i
end
case (num1 <=> num2)
when -1 then return -1
when 1 then return 1
end
when -1 then return -1
when 1 then return 1
end
end
return 0
end
end