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

2009年5月9日星期六

ruby的运算符

顺序 运算符 意义

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|
|
|

|

|

|

|

|

|


:: 在定义嵌套的类和模块的类外可通过使用 ":" 对其访问
[] 数组操作符
! 返回操作数的相反值
~ 按位取反
+(单) 正号
**
-(单) 负号
*
/
% 取模
+
-
<< 左移
>> 右移
& 位与
| 位或
^ 位异或
< 小于
> 大于
<= 小于等于
>= 大于等于
<=> 比较大小。小于,等于,大于,分别返回 -1, 0 或 +1
== 恒等于
!= 不等于
=~ 肯定匹配
!~ 否定匹配
=== 用来比较case语句的目标和每个when从句的项
&& 逻辑与
|| 逻辑或
.. 区间(含尾部元素)
... 区间(不含尾部元素)
?: 条件运算符
= 负值
not 返回操作数的相反值
and 逻辑与
or 逻辑或

2009年5月6日星期三

让正式表达式 '.' 也能查找到换行

使用 Ruby 正则表达式中的 m 检索模式, 例:


p /./ =~ "\n"    #=> nil
p /./m =~ "\n"    #=> 0


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

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 的正则表达式中, 表示字符串中的行末.

字符串的查找

查找匹配字符
用正则表达式查找匹配字符时,使用 =~ 运算符.


# 查找含有全角空格和半角空格.

p ([\s\t] =~ 'a c')    #=>  1
p ([\s\t] =~ 'abc')    #=>  nil



查找匹配字符最初出现在位置
查找匹配字符最初出现在位置时,使用 String#index


p 'xxxabcabcabcxxx'.index('abc')    #=>  3
p 'xxxabcabcabcxxx'.index('.')     #=>  nil
p 'xxx..............xxx'.index('.')     #=>  3



查找匹配字符最后出现在位置
查找匹配字符最后出现在位置时,使用 String#rindex


p 'xxxabcabcabcxxx'.rindex('abc')    #=>  9
p 'xxxabcabcabcxxx'.rindex('.')     #=>  nil
p 'xxx..............xxx'.rindex('.')     #=>  16



取得匹配字符外的字符串
取得到匹配字符之后的字符串,使用 Regexp#match


m = /abc/.match('xxxabcabcabcxxx')
p m.post_match    #=>  "abcabcxxx"
m = 'xxxabcabcabcxxx'.match(/abc/)
p m.post_match    #=>  "abcabcxxx"



查找字符串中匹配的所有字符
查找字符串中匹配的所有字符,使用 String#scan


# 查找字符串中的所有字母.
str = "abc所\ndef有\nghi字符\n"
str.scan(/[a-z]+/){ |s|
    p s
}

#=>  "abc"
#=>  "def"
#=>  "ghi"



取得含有匹配字符的一行
含有匹配字符的复数行.使用 String#grep (Enumerble#grep)


# 输出含有字母 a 和 g 的一行.

str = "abc所\ndef有\nghi字符\n"
str.grep(/[ag]/){ |line|
    p line
}

#=>  "abc所\n"
#=>  "ghi字符\n"


以下的两种写法同上相同

str.grep(re){ |line|
    # 处理内容
}



str.each{ |line|
    if re =~ line
        # 处理内容
    end
}