设为首页 加入收藏

TOP

Ruby字符串(2):String方法详细整理(九)
2019-08-15 00:10:18 】 浏览:388
Tags:Ruby 字符串 String 方法 详细 整理
false

match()的pattern可以是正则对象,也可以是字符串,如果是字符串将转换成正则表达式对象。

然后用pattern去匹配字符串,将匹配的内容放进MatchData类中,这个类中是对所有匹配到内容的封装。

指定了pos后,表示从此位置处开始向后搜索。

如果match()后给了代码块,则将MatchData传递给代码块。

match?在匹配到内容时返回true,否则返回false。

'hello'.match('(.)\1')      #=> #<MatchData "ll" 1:"l">
'hello'.match('(.)\1')[0]   #=> "ll"
'hello'.match('(.)\1')[1]   #=> "l"
'hello'.match(/(.)\1/)[0]   #=> "ll"
'hello'.match(/(.)\1/, 3)   #=> nil
'hello'.match('xx')         #=> nil

'hello'.match('(.)\1') {|x| p x}  #=> #<MatchData "ll" 1:"l">

"Ruby".match?(/R.../)    #=> true
"Ruby".match?(/R.../, 1) #=> false
"Ruby".match?(/P.../)    #=> false
$&                       #=> nil

next和next!

succ和succ!

next → new_str
next! → str

succ → new_str
succ! → str

next和succ等价。

将字符串最右边的字母/数组(不是最右边的字符,因为最右边的字符可能不是字母、数值)转换成它的下一个位。例如最右边的字符8变成9,a变成b。

需要注意:

  1. 数值和字母的递增很容易理解。但如果完全没有字母、数值,则最右边的字符按照排序规则进行递增
  2. 如果发生了进位操作,则返回到左边进行递增。这是递归的,直到没有可进位的操作为止。在进位的时候,有可能会增加一个字符。看下面的示例
"abcd".succ        #=> "abce"      # 最后一个字母
"THX1138".succ     #=> "THX1139"   # 最后一个数值
"<<koala>>".succ   #=> "<<koalb>>" # 最后一个字母
">>>".succ         #=> ">>?"       # 没有数值、字母,递增最后一个字符
"1999zzz".succ     #=> "2000aaa"   # 先递增zzz为aaa,进位后递增1999为2000
"ZZZ9999".succ     #=> "AAAA0000"  # 先递增9999为0000,进位后递增ZZZ为AAAA
"***".succ         #=> "**+"       # 没有数值、字母,递增最后一个字符

partition和rpartition

partition(sep) → [head, sep, tail]
partition(regexp) → [head, match, tail]

rpartition(sep) → [head, sep, tail]
rpartition(regexp) → [head, match, tail]

从左或从右开始匹配字符串,并将第一次匹配之前的内容、第一次匹配的内容、第一次匹配之后的内容这三部分组成一个数组。

"hello".partition("l")         #=> ["he", "l", "lo"]
"hello".partition("x")         #=> ["hello", "", ""]
"hello".partition(/.l/)        #=> ["h", "el", "lo"]

"hello".rpartition("l")         #=> ["hel", "l", "o"]
"hello".rpartition("x")         #=> ["", "", "hello"]
"hello".rpartition(/.l/)        #=> ["he", "ll", "o"]

reverse和reverse!

reverse → new_str
reverse! → str

将字符串字符反转。

"hello".reverse   #=> "olleh"

scan

scan(pattern) → array
scan(pattern) {|match, ...| block } → str

按照正则表达式匹配字符串,从前向后每次匹配到的结果放进数组或传递到代码块。

如果没有使用分组捕获,则从前向后每次匹配到的内容都作为数组的元素或直接传递给代码块。

如果使用了分组捕获,则正则每次匹配的分组放进子数组中。

a = "cruel world"
a.scan(/\w+/)        #=> ["cruel", "world"]
a.scan(/.l/)         #=> ["el", "rl"]
a.scan(/.../)        #=> ["cru", "el ", "wor"]
a.scan(/(...)/)      #=> [["cru"], ["el "], ["wor"]]
a.scan(/(..)(..)/)   #=> [["cr", "ue"], ["l ", "wo"]]


a.scan(/\w+/) {|w| print "<<#{w}>> " }
   #=> <<cruel>> <<world>>
a.scan(/(.)(.)/) {|x,y| pri
首页 上一页 6 7 8 9 10 11 下一页 尾页 9/11/11
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇猫眼电影练习,动态字体 下一篇安装Ruby、多版本Ruby共存、Ruby..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目