正则表达式的组件可以是单个的字符,字符集合,字符范围,字符间的选择或者所有这些组件的任意组合
正则表达式是由普通字符(a-z)以及特殊字符(被称为“元字符”)组成的文本模式,模式描述在搜索文本时候要匹配一个或者多个字符串,正则表达式作为一个模板,将某个字符模式和所搜索的字符串进行匹配
普通字符
普通字符包括没有显示指定为元字符的所有可以打印和不可以打印的字符,这包括所有大写和小写字母,所有数字,所有标点符号和一些其他的符号
非打印字符
非打印字符也可以是正则表达式的组成部分,如下列出了非打印字符的转义序列:
\cx :匹配由x指明的一个控制字符,例如 : \cM(control-M)或者一个回车符,x的值必须要在A-Z或者a-z之间,否则,将c视为一个原意字符‘c’字符
\f :匹配一个换页符等价 \x0c和 \cL
\n :匹配一个换行符,等价于\x0a或者\cJ
\r :匹配一个回车符,等价于\x0d或者\cM
\s :匹配任何空白字符,包括空格,制表符,换页符等,等价于[\f\n\r\t\v],注意Unicode正则表达式会匹配全角空格符
\S :匹配任何非空白字符,等价于[^\f\n\r\t\v]
\t :匹配一个制表符,等价于\x09或者\cl
\v :匹配一个垂直制表符,等价于\x0b和\cK
特殊字符
表示具有一些特殊含义的符号,,例如:* 表示任何字符的意思,如果要查找字符串中的‘*’符号,则需要对‘*’进行转义操作,即 :'\*’,使用 '\'对特殊字符进行转义,如下例举一些特殊字符:
(),*,+,.,[],?,^,{,},|
限定符
限定符通常用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配,可以使用如:*,+,?,{n},{n,},{n,m}等六种方式,如下列举一些常用的限定符
*:匹配前面的子表达式零次或者多次
+:匹配前面的子表达式出现一或者多次
?:匹配前面的子表达式零次或者一次
{n}:n是一个非负整数,匹配确定的n次
{n,}:n是一个非负整数,至少匹配n次
{n,m}:m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次
在上述的限定符中*,+都是贪婪的,他们会尽可能多的匹配文字,可以通过在他们后面加上一个‘?’,可以实现为非贪婪或者最小匹配
贪婪:下面的表达式匹配从开始小于符号(<)到关闭H1标记的大于符号(>)之间的所有内容
/<.*>/
非贪婪:如果只需要匹配开始和结束H1标签,可以使用如下的表达式:
/<.*?>/
如果只想匹配开始的H1标签,表达式可以是:/<\w+?>/
通过在*,+,?限定符后面加上?,可以将该表达式从贪心转换成非贪婪的表达式或者是最小匹配
定位符:
定位符可以让我们将一个正则表达式固定到行首或者行尾,他们还可以创建正则表达式如:这些正则表达式出现在一个单词内,在一个单词的开头或者一个单词的结尾
定位符用来描述字符串或者单词的结尾或者边界,^和$分别指向字符串的开始和结束,\b表示单词的前或者后边界,\B表示非单词边界