参考
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) |
. | 匹配除换行符以外的任意字符 |
$ | 匹配字符串的开始 |
^ | 匹配字符串的结束 |
puts( /\babc\b/ =~ 'aabc abc a' )
puts( /0\d{2}-\d{8}/.match('abc022-99999999') )
puts( /an\sapple/.match('an apple a day') )
puts( /an\s{3,6}apple/.match('an apple a day') )
puts(/../.match('abc'))
puts(/..\./.match('abc.'))
转义
使用\
进行转义,如匹配\.
、\*
、\*
等
重复
| 描述 |
---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
puts( /an\s*apple/.match('an apple a day') )
字符类
你只需要在方括号里列出就行了。比如:[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
贪婪匹配、非贪婪匹配例子
参考链接