原创作者: melin
阅读:3243次
评论:1条
更新时间:2011-05-26
在看书时整理的笔记。希望大家补充,成为一个好关于正则表达式的帖子
正则表达式是类型Regexp的对象。它们可以用显式的构造函数建立或者直接用 /pattern/ 和 %r/pattern/这种格式的字符常量构造。之后可以用通过使用 Regexp#match(aString) 或者用匹配操作符 =~(确定匹配)和 !~(否定匹配)与字符串进行比较。
$&接受模式匹配成功的那部分字符。
$`(键盘1左边那个键)接受模式匹配成功前面那一部分字符。
$'接受模式匹配成功后面那部分字符。
例如:
如果想在字面上出现这些字符., |, (, ), [, {, +, \, ^, $, *和 ?,需要在前面加上一个'\'。
正则表达式默认会找到字符串中第一个匹配的情况。
模式 ^ 和 $ 分别匹配一行字符的开始和结束。
字符序列 \A 和一个字符串的开始匹配,\z 和 \Z 和一个字符串的结束匹配。
在方括号"["和"]"之间的字符,用来匹配方括号里面的单个字符。
如果你想在字符类(方括号)里面包含 ] 和 - 的话,它们必须出现在开始。
例如:
在'['后面紧跟一个 ^ 代表字符类相反的含义: [^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! 会修改原始字符串。
第二个参数可以是字符串和程序块
子串函数中的转义字符
一些外加的转义字符用在字符串替换中:\&(最后那个匹配),\+(最后匹配的组),\`(匹配串前面的字符串),\'(匹配后面的字符串),\\(反斜杠)。
把一个斜杠变成两个斜杠的例子:
正则表达式是类型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 楼 笑天 2009-04-17 08:28