ruby 正则表达式

130 篇文章 0 订阅

正则表达式是类型Regexp的对象。它们可以用显式的构造函数建立或者直接用 /pattern/ 和 %r/pattern/这种格式的字符常量构造。之后可以用通过使用 Regexp#match(aString) 或者用匹配操作符 =~(确定匹配)和 !~(否定匹配)与字符串进行比较。

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

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

正则表达式默认会找到字符串中第一个匹配的情况。
模式 ^ 和 $ 分别匹配一行字符的开始和结束。
字符序列 \A 和一个字符串的开始匹配,\z 和 \Z 和一个字符串的结束匹配。
在方括号"["和"]"之间的字符,用来匹配方括号里面的单个字符。
如果你想在字符类(方括号)里面包含 ] 和 - 的话,它们必须出现在开始。
例如:
Java代码   收藏代码
  1. a = 'Gamma [Design Patterns-page 123]'    
  2. showRE(a, /[]]/)  输出: Gamma [Design Patterns-page 123<<]>>    
  3. showRE(a, /[B-F]/)   输出: Gamma [<<D>>esign Patterns-page 123]    
  4. showRE(a, /[-]/)   输出: Gamma [Design Patterns<<->>page 123]    
  5. 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! 会修改原始字符串。
第二个参数可以是字符串和程序块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值