先来几个栗子:
// \b 表示匹配一个位置:单词开头或结尾
\bhi\b //=> hi
// . 匹配除换行符以外的任意字符
// * 匹配多次
// .* 匹配任意数量的不包含换行的字符
\bhi\b.*\bLucy\b //=> hi i love you Lucy
// \d 匹配一位数字
// {2} 匹配2次
0\d{2}-\d{8} //=> 086-13800138000
// \s 匹配任意的空白符,包括空格、制表符、换行符、中文全角空格
// \w 匹配字母或数字或下划线或汉字
\ba\w*\b //=> ahdh256hvc
// + 匹配一次或多次,注意与 * 的区别(匹配多次)
// \d+ 匹配1个或多个连续的数字
\d+ //=> 4 或 465435
\d* //=> 465435
// ^ 匹配字符串的开始
// $ 匹配字符串的结束
^\d{5,12}$ //=> 匹配5-12位的数字
// [] 匹配里边的值
[aeiou] //=> 匹配 a e i o u
[0-9] //=> 与 \d 同义
// | 表示分支
0\d{2}-\d{}8|0\d{3}-\d{7} => 匹配 010-12345678 或 0102-1234567
// () 表示分组
(\d{1,3}\.){3}\d{1,3} //=> 匹配一个IP,如 12.345.67.89
// 以上会匹配不合法的IP,如 256.777.888.999
// 大写字母 或 [^xxxx] 表示反义
\S+ //=> 匹配不包含空白符的字符串
<lai[^>]+> //=> 匹配 <laispace>
// (?=exp) 零宽度正预测先行断言,即自身出现的位置后面能匹配 exp
\b\w+(?=ing\b) //=> 查找 I'm reading a book 时匹配 read
// (?<=exp)零宽度正回顾后发断言,即自身出现的位置前面能匹配 exp
(?<=\bre)\w+ //=> 查找 I'm reading a book 时匹配 ading
// (?!exp)负向零宽断言,即此位置的后面不能匹配 exp
\d{3}(?!\d) //=> 匹配三个数字,但这三个数字后不能是数字,如 123abcd
// (?<!exp)零宽度负回顾后发断言,即此位置的前面不能匹配 exp
(?<![a-z])\d{7} //=> 匹配前面不是小写字母的七位数字
元字符
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
反义
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
重复
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
懒惰
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复