1. 元字符 metacharater

\b 代表着单词的开头或者结尾,也就是单词的分界处;

. 匹配除了换行符以外的任意字符;

\d 匹配一位数字;

\s 匹配任意的空白符,包括空格,制表符,换行符,中文全角空格等;

\w 匹配字母或数字或下划线或者汉字等;

^ 匹配字符串的开始;

$ 匹配字符串的结束;

字符转义仍然是使用\\

2. 限定

\* 指定前面的内容可以连续重复任意次(包括0次);

? 重复零次或者一次;

{n} 重复n次;

{n,1} 重复n次或者更多次;

{n,m} 重复n次到m次;

3. 字符类

可以利用方括号来匹配所需字符,[acb]代表可以匹配abc其中的一个,所以[]只用来匹配没有元字符对应的字符集中的单个字符

比如[0-9],就跟\d是完全一致的,也就是匹配单个数字

4.分支条件

正则表达式分支条件示例:\d{5}-\d{4}\|\d{5}

这个例子含有一个小的tricky的地方,就是它说明了一个问题: 用分支条件时,要注意各个条件的顺序。如果把这个表达式改为\d{5}|\d{5}-\d{4}, 那么就只会匹配五位的邮编以及9位邮编的前5位。

原因是匹配分支条件时,将会从左到右地测试每个条件,如果满足了某个分支的话,就不会再管其它条件。

5. 分组

上面所说的都是重复单个字符的方法,如果想要重复多个字符可以用小括号来指定子表达式(也叫作分组),这也是当我们需要(字符本身时需要对其进行转义的原因。

(.){3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:匹配1到3位的数字,(.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字()。

6.反义

代码语法 说明
\W 匹配任意不是字母、数字、下划线、汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

7.后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或者其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左到右,以分组的左括号为标志,第一个出现的分组组号为1,第二个为2,以此类推。

分组0对应整个正则表达式; 实际上组号分配过程是要从左到右扫描两遍:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有的命名组的组号都大于未命名组的组号; 你可以使用(?:exp)这样的语法来剥夺一个分组对组号分配的参与权。 \b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。 你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b。

常用分组语法:

待补充