正则表达式
一、概述
正则表达式是一种表达文本模式的方法。我们通常会定义一个正则表达式规则,然后用这个规则来对一些字符串进行匹配。比如我们定义了一个表示邮件地址的正则表达式,然后我们使用这个正则表达式对用户输入的字符串进行匹配,看这个字符串是不是一个邮件地址。
二、字面量字符与元字符
组成正则表达式字符串的所有字符被分为两类:字面量字符与元字符。
- 字面量字符:它就表示字符的字面量,比如正则表达式
a就匹配字符串a。正则比表达式abcb就匹配字符串abcb,这些字符没有代表什么特殊的含义。 - 元字符:这些字符不匹配他们字面量本身,他们有特殊的含义。如正则表达式中点号
.意思并不是匹配字符.,而是匹配所有除换换行符外的所有字符。如果要匹配元字符的字面量字符,则需要使用转移符\对这个元字符转义。如\.就会匹配字符.而不是除换行符外的所有字符。
正则表达式中的元字符有: .,\,?,+,*,(),[],{},^,$,|,-等。
三、元字符详解
.:表示匹配除换行符外的所有字符。\:表示转义,如果要匹配元字符中有特殊含义的字符,则要使用转义。?:表示前面的一个模式出现0次或1次。+:表示前面的一个模式出现1次或多次。*:表示前面的一个模式出现0次或多次。():表示组匹配。比如abc+可以匹配字符串abcc。因为这里对于+来说他前面的模式就是c,那么c+表示有一个或者多个c,因此abc,abcc,abccc都可以。但是如果我们想让+作用于abc呢,那么可以使用组匹配()将abc作为一个组:(abc)+。这样就会匹配abcabc或者abcabcabc等等了。- 如果想匹配但是不获取这个组那么使用
(?:)。如(?:abc);
- 如果想匹配但是不获取这个组那么使用
[]:表示匹配的字符的集合,注意三种用法:[abc]:表示匹配字面量a或b或c。- 可以使用连字符,
[a-c]:也是表示匹配a或b或c。 - 可以使用脱字符
^,[^abc]: 表示匹配除a,b,c之外的其他字符。
{}:表示前面的一个模式重复的次数。abc{5}:表示它前面的一个模式c出现的次数是5次。abc{2,5}:表示它前面的一个模式c出现的次数是2到5次(注意逗号之间不能有空格)。(abc){5}:表示它前面的模式abc出现的次数是5次。(abc){2,5}:表示它前面的模式abc出现的次数是2到5次。
^:有两种不同的用法:^在元字符[]里。如果是第一个字符,那么表示匹配除了中括号里面的字符外其他字符。如果不是,那么表示匹配字面量^。- 如果
^不在元字符[]里面,那么他只能在整个正则表达式的开头,表示匹配由^后面接的第一个模式开头的字符串。
$:表示正则的末尾。|:表示或。-:在元字符[]里面表示范围,如果不在这个元字符里面那么表示字面量-
三、预定义模式
预定义模式是一些常见模式的简写方式。
\d匹配一个0-9之间的任意数字,相当于[0-9]。\D匹配一个所有0-9以外的字符,相当于[^0-9]。\w匹配一个任意的字母或数字或下划线,相当于[A-Za-z0-9_]。\W匹配一个除所有字母和数字和下划线以外的字符,相当于[^A-Za-z0-9_]。\s匹配一个空格(包括换行符、制表符、空格符等),相等于[ \t\r\n\v\f]。\S匹配一个非空格的字符,相当于[^ \t\r\n\v\f]。\b匹配词的边界。\B匹配非词边界,即在词的内部。
四、贪婪模式
对于用来设定某个模式出现的次数的三个量词元字符?,+和*,默认情况下他们的匹配规则是最大可能匹配,也就是说他们会匹配到下一个字符不满足匹配规则为止。这个种匹配规则被称为贪婪模式。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 杰布是谁!