正则表达式可以匹配某些特定的数据,如果你想要从庞大的文字信息中提取出一小段你需要的数据,那么正则表达式或许能帮到你。
字符组
[ ]允许匹配一组可能出现的字符。
可以发现[Pp]
既可以匹配大写的P
也可以匹配小写的p。
区间
1、要匹配任意数字可以使用[0-9]。
2、如果想要匹配所有小写字母,可以写成[a-z]。
3、想要匹配所有大写字母可以写成[A-Z]。
匹配特殊字符
“[]”在正则表达式命令中具有意义,如果我们想要匹配符号“[]”则需要进行转义即 \[] ,其他符号例如 '()' '\' 等均可实现,其中小括号若需要 '\(\)'转义两次,大括号不用转义
快捷方式
^ 在[]内表示取反,在外表示匹配行首,写在匹配字符前面
$ 匹配行尾,写在匹配字符后面。
\d 数字字符,等价于[0-9]。
\w 单词字符(字母,数字及下划线),等价于[0-9a-zA-Z_]。
\s 空白符(tab和空格)。
\b 匹配单词边界。
\D\W\S\B与\d\w\s\b匹配相反。
'.'匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’(回车产生的换行)在内的任何字符,请使用 ‘[.\n]’进行匹配
?匹配前一个字符或字符组出现零次或一次,另一个作用是将贪婪模式修改为非贪婪模式。
+ 匹配前一个字符或字符组一次或多次。
* 匹配前一个字符或字符组零次或多次。
匹配多个区间
在一个字符组后加上{N} 就可以表示在它之前的字符组出现N次。
{M,N},M是下界而N是上界。例如\d{3,4} 既可以匹配3个数字也可以匹配4个数字,不过当有4个数字的时候,优先匹配的是4个数字,这是因为正则表达式默认是贪婪模式,即尽可能的匹配更多字符,而要使用非贪婪模式,我们要在表达式后面加上 ?号。
分组
() 分组。使用分组时,除了获得整个匹配。还能够在匹配中选择每一个分组。
| 或者。使用分组的同时还可以是用或者条件,与“or”相同。
(?:表达式) 有时候,我们并不需要捕获某个分组的内容,但是又想使用分组的特性。
\N 表示可以引用与编号为N的分组相同的格式,且匹配的数据最终结果也与N相同。
先行 / 后行断言
(?=表达式) 正向先行断言。指在某个位置向右看,表示所在位置右侧必须能匹配表达式。
(?!表达式) 反向先行断言。指在某个位置向右看,表示所在位置右边不能匹配表达式。
(?<=表达式) 正向后行断言。指在某个位置向左看,表示所在位置左侧必须能匹配表达式。
(?<!表达式) 反向后行断言。指在某个位置向左看,表示所在位置左侧不能匹配表达式。
例子:
提取下列数据中所有人的生日,使用两个分组,第一个分组提取“月”,第二个分组提取“日”。
请编写正则表达式匹配所有的小数:
匹配8-16位密码包含大小写字母,数字,部分字符