正则表达式的目的是操纵文本。常用的概念如下,理解了这些概念可以更方便的理解正则表达式,也可以自己来写正则表达式。
原义字符:即正常的字符,例如:A,b,c ,1,2等。
元字符:元字符代表的是一类字符或位置描述。例如 “.”,这个点在正则表达式中代表除了换行符以外的任意字符。
常用的元字符:
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
重复:
为了方便描述字符重复的次数,正则表达式中有以下限定符可以使用
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
再例如“*”,星号在正则表达式中表示*前边的内容可以连续重复使用任意次, a*就表示任意个a。 a{3}就表示“aaa”
自定义范围:
如果想匹配没有预定义元字符的字符集合怎么办?可以自定义范围,例如:想匹配a,b,c,d中任意一个字符,就可以定义[abcd], 那么[abcd] 就可以匹配a或b或c或d。
分支条件:
分支条件表示满足几种原则中的一种就是认为是匹配的。例如要在文档中搜索3位数字后跟一个“-” 或4位数字后跟一个“-”,正则表达式可以这样写:\d{3}|\d{4}
要理解“|” ,这个是表示或的意思。
分组:
分组是为了匹配重复的子串,例如“abcabc”,abc重复了两次,正则表达式中怎么写呢,正则表达式中可以用小括号来定义分组,(abc){2} 就表示abcabc,(\d{3}.){3} 就表示类似123.123.345.456 的字符串
反义:
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:
常用反义
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^abcde] | 匹配除了abced这几个字母以外的任意字符 |
后向引用
在正则表达式中定义了分组,如果在正则表达式的后面还要用到,怎么办呢,你可以再写一遍,也可以通过后向引用,来引用前面定义好的分组。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。也可以自己指定子表达式的组名。例如前面定义的组(abc),如果加上名称就是(?<myname>abc,这个分组的名称就是myname。如果有一个字符串“abchelloabc”,想匹配这个字符串,就可以用下面的正则表达式(?<myname>abc)hello\k<myname> 。注意后面的\k<myname>, 它就代表了前面定义的分组(abc)。