参考 30分钟入门教程: https://deerchao.net/tutorials/regex/regex.htm 在线测试工具 http://tool.oschina.net/regex/

ruby正则表达式:

a). match方法: 匹配成功时返回MatchData类的一个实例;否则返回nil; b). =~ 操作符: 匹配成功,返回一个索引(integer);否则,返回nil;

puts(/abc/ =~ 'ffabcf' )    //返回第一个匹配到的下标2
puts( /abc/.match('abc'))   //abc

元字符

元字符:

| | 描述 |
| — | — |
| \b | 代表着单词的开头或结尾,也就是单词的分界处 |
|\d|匹配数字| |\w|匹配字母或数字或下划线或汉字,类似于[a-z0-9A-Z_]| |\s|匹配任意的空白符(space)| |. |匹配除换行符以外的任意字符| |$|匹配字符串的开始| |^|匹配字符串的结束|

#匹配单词 abc
puts( /\babc\b/ =~ 'aabc abc a' )  #5
#0开头,必须连续重复匹配2次(8次)。
puts( /0\d{2}-\d{8}/.match('abc022-99999999') ) #022-99999999
#使用`\s`匹配空白符
puts( /an\sapple/.match('an apple a day') ) #an apple
#匹配3-6个空格 `\s{3,6}`
puts( /an\s{3,6}apple/.match('an      apple a day') )#an      apple
#`.`匹配非换行符
puts(/../.match('abc')) #ab
puts(/..\./.match('abc.')) #bc.

转义

使用\进行转义,如匹配\.\*\*

重复

| | 描述 |
| — | — |
| * | 重复零次或更多次 |
| + |重复一次或更多次 |
| ? | 重复零次或一次 |
| {n}| 重复n次 |
| {n,}| 重复n次或更多次 |
| {n,m} |重复n到m次 |

#匹配多个空格
puts( /an\s*apple/.match('an        apple a day') ) #an        apple 

字符类

你只需要在方括号里列出就行了。比如:[aeiou]匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)。

分支条件

正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。

比如匹配010-10000和(010)10000,保证0开头(小括号需要转义):0\d{2}-\d{5}|\(0\d{2}\)\d{5}

puts(/0\d{2}-\d{5}|\(0\d{2}\)\d{5}/.match('(010)10000'))

分组

可以实现重复多个字符串片段.

如简单匹配ip地址(不考虑规则):(\d{1,3}\.){3}\d{1,3}

反义

查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:

| | 描述 |
| — | — |
| \B | 匹配不是单词开头或结束的位置 |
|\D|匹配任意非数字的字符| |\W|匹配任意不是字母,数字,下划线,汉字的字符| |\S|匹配任意不是空白符的字符| |[^x] |匹配不是x以外的任意字符| |[^aeiou]|匹配除了aeiou这几个字母以外的任意字符|

补充

//2019-05-21

贪婪匹配、非贪婪匹配例子

20190521155841839198945.png

参考链接