显示标签为“slice”的博文。显示所有博文
显示标签为“slice”的博文。显示所有博文

2009年5月16日星期六

取出字符串中的一部分

在字符串中,从给定的起始位置开始, 任意长度的字符



p 'abcdefghi'[3..3]    #=> "def" (从3开始3byte)



同样也可以使用给定的起始位置和结束位置,来从字符串中取出这一区间的字符



p 'abcdefghi'[3..5]    #=> "def"
p 'abcdefghi'[3...6]    #=> "def"



以上的方法都是以byte单位为进行计算的
下面使用正则表达式来实现



# 从 a 开始取出3个字符
p 'abcdefghi'.slice(/a../)    #=> "abc"
p 'abcdefghi'.slice(/x../)    #=> nil

# 将所有匹配字符取出
p 'static int fact(int n)'.scan(/\w+/)
    #=> ["static", "int", "fact", "int", "n"]



2009年5月3日星期日

从首字符或尾字符开始的查找

在 Ruby 的正则表达式中, "首字符" 为 \A, "尾字符" 为 \z(注意z是小写字符)


p (/\Aa/ =~ "aiueo")    #=> 0
p (/\Ao/ =~ "aiueo")    #=> nil
p (/a\z/ =~ "aiueo")    #=> nil
p (/o\z/ =~ "aiueo")    #=> 4


注:
    我们经常会在正则表达式中看到, ^ 和 $ 运算符. 它们分别表示为 行首 和 行末.


p "abc\ndef\nghi\n".slice(/..$/m)    #=> "bc"
p "abc\ndef\nghi\n".slice(/..\Z/m)    #=> "hi"
p "abc\ndef\nghi\n".slice(/..\z/m)    #=> "i\n"


??:
    /../m 在 Ruby 的正则表达式中, m 为多行检索时,换行符会被看做普通字符来处理.
    \Z 在 Ruby 的正则表达式中, 表示字符串中的行末.