Thursday, October 09, 2008

(7)正则表达式与序列

前面的章节中我们提到了Ruby中的数组和字典对象以及整数和字符串对象,现在我们要介绍另外两种重要的对象,正则表达式(Regexp )和序列(Range)。正则表达式描述了一种文本模式,并且提供了方法来判断一个字符串是否与给定的模式匹配;序列对象是中间用两个点号隔开的值(通常用于整数值)
/[Rr]uby/        # 匹配 "Ruby" 或者 "ruby"
/\d{5}/ # 匹配5个连续的数字
1..3 # 代表所有的1到3之间的值,相当于1<= x <=3
1...3 # 代表一到3之间的值,但不包括3,相当于 1 <= x < 3

正则表达式和序列通过==来判断是否相等,除此之外还定义了一个===来测试是模式否匹配或者序列中是否包含某个成员。
Ruby 中的case(类似于Java或C中的switch语句) 语句使用===来匹配每一个判断的值,所以这中方式通常称为条件相等操作符,通常与用条件判断,例如:
# 根据出生日期判断使用那个名字

generation = case birthyear
when 1946..1963: "Baby Boomer"
when 1964..1976: "Generation X"
when 1978..2000: "Generation Y"
else nil
end

# 定义一个方法来与用户进行确认
def are_you_sure? # 定义一个方法,用到了问号标记
while true # 开始循环
print "Are you sure? [y/n]: " # 向用户提问
response = gets # 获得答案
case response # 开始条件判断
when /^[yY]/ # 如果条件值的首字母为Y或者y
return true # 返回true
when /^[nN]/, /^$/ # 如果条件值以n,N开头或者为空
return false # 返回false
end
end
end

No comments: