原创作者: melin   阅读:3243次   评论:1条   更新时间:2011-05-26    
在看书时整理的笔记。希望大家补充,成为一个好关于正则表达式的帖子
正则表达式是类型Regexp的对象。它们可以用显式的构造函数建立或者直接用 /pattern/ 和 %r/pattern/这种格式的字符常量构造。之后可以用通过使用 Regexp#match(aString) 或者用匹配操作符 =~(确定匹配)和 !~(否定匹配)与字符串进行比较。

$&接受模式匹配成功的那部分字符。
$`(键盘1左边那个键)接受模式匹配成功前面那一部分字符。
$'接受模式匹配成功后面那部分字符。
例如:
def showRE(a,re)  
  if a =~ re  
    "#{$`}<<#{$&}>>#{$'}"  
  else  
    "no match"  
  end  
end  

如果想在字面上出现这些字符., |, (, ), [, {, +, \, ^, $, *和 ?,需要在前面加上一个'\'。

正则表达式默认会找到字符串中第一个匹配的情况。
模式 ^ 和 $ 分别匹配一行字符的开始和结束。
字符序列 \A 和一个字符串的开始匹配,\z 和 \Z 和一个字符串的结束匹配。
在方括号"["和"]"之间的字符,用来匹配方括号里面的单个字符。
如果你想在字符类(方括号)里面包含 ] 和 - 的话,它们必须出现在开始。
例如:
a = 'Gamma [Design Patterns-page 123]'  
showRE(a, /[]]/)  输出: Gamma [Design Patterns-page 123<<]>>  
showRE(a, /[B-F]/)   输出: Gamma [<<D>>esign Patterns-page 123]  
showRE(a, /[-]/)   输出: Gamma [Design Patterns<<->>page 123]  
showRE(a, /[0-9]/)  输出: Gamma [Design Patterns-page <<1>>23]  

在'['后面紧跟一个 ^ 代表字符类相反的含义: [^a-z]与不是小写字母的字符匹配。

字符类缩写
字符序列  [ ... ]          意思 
\d        [0-9]           数字字符
\D        [^0-9]          非数字
\s        [\s\t\r\n\f]    空格字符
\S        [^\s\t\r\n\f]   非空格字符
\w        [A-Za-z0-9_]    单词符号
\W        [^A-Za-z0-9_]   非单词符号

重复
r *       匹配0个或多个 r.
r +       匹配1个或多个 r.
r ?       匹配0个或1个 r.
r {m,n}   匹配最少m个,最多n个 r.
r {m,r}    匹配最少m个 r.
重复模式串尽可能匹配多的字符串,在其后面加一个问号“?”,让它匹配最少的。
'|'匹配正则表达式中它左右两边模式中的一个。

基于模式的子串技术
String#sub 和 String#gsub 方法 寻找字符串中匹配它们第一个参数的那部分,然后把那部分用它们的第二个参数代替,前者只替换一次,后者替换所有的。另外一个版本的方法String#sub! 和 String#gsub! 会修改原始字符串。
第二个参数可以是字符串和程序块

子串函数中的转义字符
一些外加的转义字符用在字符串替换中:\&(最后那个匹配),\+(最后匹配的组),\`(匹配串前面的字符串),\'(匹配后面的字符串),\\(反斜杠)。
把一个斜杠变成两个斜杠的例子:
str.gsub(/\\/, '\\\\\\\\')   输出: "a\\b\\c" 

评论 共 1 条 请登录后发表评论
1 楼 笑天 2009-04-17 08:28
这些我都看了,谢谢各位大侠的整理。呵呵

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics