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。
需要注意:
- 数值和字母的递增很容易理解。但如果完全没有字母、数值,则最右边的字符按照排序规则进行递增
- 如果发生了进位操作,则返回到左边进行递增。这是递归的,直到没有可进位的操作为止。在进位的时候,有可能会增加一个字符。看下面的示例
"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