ruby标准类型总结
Ruby支持整数和浮点数,整数可以是任意长度 一定范围内的整数以二进制存放,它们属于fixnum类型,当超出这个范围时则自动转换为bignum类型 表达方式:符号+一串字符, 数字串中的下划线会被忽略,(前缀包括:0表示八进制,0x表示十六进制,0b表示二进制)123_456_789_123_345_789#Bignum
0xaabb#十六进制也可以通过在前面加上问号来得到ASCII码字符对应的整数值和转义序列的值
?a#普通字符
?\n#换行符(0x0a)
?\C-a#CTRL+a(0x01)
?\M-a#ALT+a
?\M-\C-a#CTRL+ALT+a
?\C-?#删除键一个带小数点的数字字面值被转换成Float对象 所有的数字都是对象,不存在相应的函数而是方法
exp:
数字的绝对值是aNumber.abs而不是abs(aNumber)整数有用的迭代器 3.times{print"X"}=>XXX 1.upto(5){|i|printi,""}=>12345 99.downto(95){|i|printi,""}=>9998979695 50.step(80,5){|i|printi,""}=>50556065707580
- Ruby的字符串是8位字节的简单序列,字符串是String类的对象
- 注意转换机制(
注意单引号与双引号的区别),如:
单引号中两个相连的反斜线被替换成一个反斜线,,一个反斜线后跟一个单引号被替换成一个单引号"escapeusing"\\"">>转义为"\" "That\"sright">>That"sright
双引号支持多义的转义
"\n"
#{expr}序列来替代任何的Ruby表达式的值, (全局变量、类变量或者实例变量,那么可以省略大括号) "Seconds/day:#{24*60*60}">>Seconds/day:86400 "#{"Ho!"*3}MerryChristmas">>Ho!Ho!Ho!MerryChristmas "Thisisline#$.">>Thisisline3 - heredocument来创建一个字符串,end_of_string为结束符号
aString=<< END_OF_STRING Thebodyofthestring istheinputlinesupto oneendingwiththesame textthatfollowedthe"<<" END_OF_STRING %q和%Q分别把字符串分隔成单引号和双引号字符串(即%q与%Q后面的符号具有","的功能)
%q/generalsingle-quotedstring/>>generalsingle-quotedstringString常用功能
String#split:把行分解成字段
String#chomp:去掉换行符
String#squeeze:剪除被重复输入的字符
String#scan:以指定想让块匹配的模式
exp:/jazz/j00132.mp3|3:45|FatsWaller|Ain"tMisbehavin"
/jazz/j00319.mp3|2:58|LouisArmstrong|WonderfulWorld
#文件格式如上,要进行分解
songs=SongList.new
songFile.eachdo|line|
file,length,name,title=line.chomp.split(/\s*\|\s*/)#先chomp,后再分解,/\s*表示任字符
name.squeeze!("")#替换空格
mins,secs=length.scan(/\d+/)#这里用scan匹配模式
songs.appendSong.new(title,name,mins.to_i*60+secs.to_i)
end
区间存在于任何地方,如:1到12月。ruby用区间实现了3个不同的特性:序列,条件,间隔。 "..":两个点号创建一个闭区间,"...":而三个点号创建一个右开区间(即右边界不取值)
exp:0..anArray.length-1等同于0...anArray.lengthto_a把区间转换成列表
exp:("bar".."bat").to_a>>["bar","bas","bat"]区间的共它的用法
digits=0..9
digits.include?(5)>>true
digits.min>>0
digits.max>>9
digits.reject{|i|i<5}>>[5,6,7,8,9]
digits.eachdo|digit|
dial(digit)
endruby能把基于自己定义的对象的区间,要求:这个对象必须能够响应succ方法来返回序列中的下一个对象,并且这个对象必须能够使用<=>运算符来被比较,即常规的比较运算符, 间隔测试
puts(1..10).include?(3.14)=>ture
puts(1..10)===3.14 =>ture
正则表达式是Regexp类型的对象,可以使用构造器显式地创建一个正则表达式,也可以使用字面值形式/pattern/和%r\pattern\来创建 用Regxp#match(aString)的形式或者匹配运算符=~(正匹配)和!~(负匹配)来匹配字符串了。匹配运算符在String和Regexp中都有定义,如果两个操作数都是字符串,则右边的那个要被转换成正则表达式
exp:
a="FatsWaller"
a=~/a/>>1
a=~/z/>>nil
a=~"ll">>7上面返回的是匹配字符的位置,其它
$&接受被模式匹配到的字符串部分
$`接受匹配之前的字符串部分
$"接受之后的字符串。
exp:下面的方法后继都会用到
defshowRE(a,re)
ifa=~re
"#{$`}<<#{$&}>>#{$"}"#返回前、中、后
else
"nomatch"
end
end
模式,任何一个表达式都包含一个模式,它用来把正则表达式和字任串匹配
模式中除了.,|,(,),[,{,+,\,^,$,*,和?以外的字任都匹配它自己
如果要匹配这些特殊的字符就需要加上反斜线做前缀,分析上面例字
/\s*\|\s*/,在\s与|之前都加了/做前缀。
showRE("kangaroo",/angar/)>>k<<angar>>oo
showRE("!@%&-_=+",/%&/)>>!@<<%&>>-_=+
showRE("yes|no",/\|/)>>yes<<|>>no
\后跟一个字母或数字表示一个特定的结构如\s表示字符等。 锚点 一个正则表达式总是返回找到模式的第一个匹配,如何改变?
模式^和$分别用来匹配行首和行尾
序列\A匹配字符串开始的位置,\z和\Z匹配字符串结尾的位置
\b和\B分别匹配字边界和非字边界showRE("thisis\nthetime",/^the/)>>thisis\n<<the>>time
showRE("thisis\nthetime",/is$/)>>this<<is>>\nthetime
showRE("thisis\nthetime",/\Athis/)>><<this>>is\nthetime
showRE("Itcosts$12.",/[aeiou]/)>>Itc<<o>>sts$12.
showRE(a,/[]]/)>>Gamma[DesignPatterns-page123<<]>>
showRE(a,/[B-F]/)>>Gamma[<<D>>esignPatterns-page123]
showRE(a,/[-]/)>>Gamma[DesignPatterns<<->>page123]
showRE(a,/[0-9]/)>>Gamma[DesignPatterns-page<<1>>23]
序列形如[...]含义
\D[^0-9]Nondigit
\s[\s\t\r\n\f]Whitespacecharacter匹配一个单空白符
\S[^\s\t\r\n\f]Nonwhitespacecharacter
\w[A-Za-z0-9_]Wordcharacter
\W[^A-Za-z0-9_]Nonwordcharacter
r*匹配0个或多个r的出现
r+匹配一个或多个r的出现
r?匹配0个或1个r的出现
r{m,n}匹配最少m最多n个r的出现
r{m,}匹配最少m个r的出现
重复结构有高优先权:即它们仅和模式中的直接正则表达式前驱捆绑
/ab+/匹配一个"a"后跟一个活着多个"b",而不是"ab"的序列
/a*/会匹配任何字符串:0个或者多个"a"的任意字符串。
exp:
showRE(a,/\w+/)>><<The>>moonismadeofcheese
showRE(a,/\s.*\s/)>>The<<moonismadeof>>cheese
showRE(a,/\s.*?\s/)>>The<<moon>>ismadeofcheese
showRE(a,/[aeiou]{2,99}/)>>Them<<oo>>nismadeofcheese
showRE(a,/mo?o/)>>The<<moo>>nismadeofcheese
"|"既匹配它前面的正则表达式或者匹配后面的
showRE(a,/d|e/)>>r<<e>>dballbluesky
showRE(a,/al|lu/)>>redb<<al>>lbluesky
showRE(a,/redball|angrysky/)>><<redball>>bluesky
圆括号把正则表达式分组,组中的内容被当作一个单独的正则表达式
showRE("banana",/(an)+/)>>b<<anan>>a
#匹配重复的字母
showRE("Hesaid"Hello"",/(\w)\1/)>>Hesaid"He<<ll>>o"
#匹配重复的子字符串
showRE("Mississippi",/(\w+)\1/)>>M<<ississ>>ippi
方法String#sub和String#gsub都在字符串中搜索匹配第一个参数的部分,然后用第二个参数来替换它们。String#sub只替换一次,而String#gsub替换所有找到的匹配。都返回一个包含了替换的新的字符串的拷贝。进化版本是String#sub!和String#gsub!
a.sub(/[aeiou]/,"*")>>"th*quickbrownfox"
a.gsub(/[aeiou]/,"*")>>"th*q**ckbr*wnf*x"
a.sub(/\s\S+/,"")>>"thebrownfox"
a.gsub(/\s\S+/,"")>>"the"
a="thequickbrownfox"
a.sub(/^./){$&.upcase}>>"Thequickbrownfox"
a.gsub(/[aeiou]/){$&.upcase}>>"thEqUIckbrOwnfOx"
\&后面的匹配
\+后面的匹配组
\`匹配前面的字符串
\"匹配后面的字符串
\\反斜线的字面值
re=/cat/
re.type>>Regexp
exp:
md=re.match("Time:12:34am")
md.type>>MatchData
md[0]#==$&>>"12:34"
md[1]#==$1>>"12"
md[2]#==$2>>"34"
md.pre_match#==$`>>"Time:"
md.post_match#==$">>"am"
相关文章
- 插头DP小结_dp插头接线标准
- 下一个 Wi-Fi 标准:Wi-Fi 7
- 5G进入下半场,2023旗舰手机连接新标准已定
- SAP 标准Excel解析函数改进详解编程语言
- 标准Oracle会计准则:全面、审慎、高效(oracle会计)
- 应用Linux下启动Ruby应用的指南(linux启动ruby)
- 解析Linux 标准错误输出(linux标准错误输出)
- Ruby开发灵活的MSSQL应用(ruby mssql)
- 优质带宽,高效缓存Redis实现新标准(带宽高redis)
- 里的应用Ruby语言与Redis结合应用的一次尝试(ruby在redis)
- 部署用Ruby和Redis远程部署配置生产环境(ruby redis远程)
- Ruby环境下Redis的快速安装(ruby redis安装)
- 利用Redis集群搭建Ruby缓存系统(redis集群 ruby)
- oracle数据迁移简化使用XSD标准(oracle xsd)
- 今年美国市场标准续航升级版 Model 3 已售罄,现在预订要明年才能交付
- js兼容标准的表格变色效果