ruby 正则表达式

时间:2022-09-09 18:48:29

1.在线的ruby正则表达式编辑工具:http://www.rubular.com/

 

2.Ruby的正则表达式以"//"作为构造方法。表达式返回一个RegExp的对象

puts /a/.class       =>Regexp

3.String和RegExp均支持=~和match 2个查询匹配方法

puts "hello world!"=~/llo/             => 2

a=/llo/.match("hello world,world hello!")                       a是一个matchdata对象

puts a[0]            =>ll0

 

如果能够匹配,=~返回匹配的字符串位置,而match返回一个MatchData对象。如果不匹配返回nil。
  MatchData可以取出其中符合各个子匹配的内容,关于Matchdata说明,请参考http://www.cnblogs.com/dami520/p/3216130.html

4.m[0]返回匹配主表达式的字符串
  下面的方法是等同的:
  m[n] == m.captures[n]

Ruby也自动的为我们填写了一些全局变量,它们以数字做名: $1,$2,等等,$1包含的是正则表达式中从左侧开始的第一对小括号内的子模式所匹配的字符串,

匹配顺序是从外到内,从左到右的

5. 一般规则:
  /a/匹配字符a。   
  /\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *.   
  .匹配任意字符,例如/a./匹配ab和ac。   
  /[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-zA-Z0-9]/。   
  /[^a-zA-Z0-9]/匹配不在该范围内的字符串。   
  /[\d]/代表任意数字
  /[\w]/代表任意字母,数字或者_
  /[\s]/代表空白字符,包括空格,TAB和换行。   
  /[\D]/,/[\W]/,/[\S]/均为上述的否定情况。
  高级规则:
  ?代表0或1个字符。/Mrs?\.?/匹配"Mr","Mrs","Mr.","Mrs."。
  *代表0或多个字符。/Hello*/匹配"Hello","HelloJack"。
  +代表1或多个字符。/a+c/匹配:"abc","abbdrec"等等。
  /d{3}/匹配3个数字。
  /d{1,10}/匹配1-10个数字。
  /d{3,}/匹配3个数字以上。
  /([A-Z]\d){5}/匹配首位是大写字母,后面4个是数字的字符串。

6.锚

锚是指必须满座一定的条件,才能继续匹配

^     行首

$     行尾

\A   字符串的开始

\z    字符串的结尾

\Z    字符串的结尾(不包括最后的换行符)

\b    单词边界

 7.修饰语位于正则表达式最结束正则表达式的正斜杠的后面

    i  使正则表达式对大小写不敏感

    m 使得正则表达式可以和任何字符匹配,包括换行符,通常情况下圆点通配符不匹配换行符

    u 使用Utf-8匹配中文

8.其他常见方法

例子1:

a=['1','b','5','c','8','d']

result=a.find_all{|z|/\d/.match(z)}

puts result   =>1,5,8

例子2:

puts "haohao 2 3 5 xuexi 6  8  5".scan(/\d/)            =>["2","3',"5","6","8","5"]