限定符(贪婪)

ab+c,可以匹配 abc、abbc 等,+ 号代表【前面的字符】必须出现【1次或多次】

ab*c,可以匹配 ac、abc 等,* 号代表【前面的字符】必须出现【0次、1次或多次】

ab?c,可以匹配 ac 或 abc,? 问号代表【前面的字符】只可以出现【0次、或1次】

ab{2}c,可以匹配 abbc,{n} 代表【前面的字符】只可以出现【n次】

ab{2,}c,可以匹配 abbc、abbbc 等,{n,} 代表【前面的字符】只可以出现【>=n次】

ab{2,3}c,可以匹配 abbc 、 abbbc,{n,m} 代表【前面的字符】只可以出现【n次~m次(包括m、n)】

懒惰限定符

+?,重复1次或更多次,但尽可能少重复

*?,重复任意次,但尽可能少重复

??,重复0次或1次,但尽可能少重复

{n,}?,重复n次以上,但尽可能少重复

{n,m}?,重复n到m次,但尽可能少重复

同上,区别为尽可能少重复。例:(abc)+?d 匹配结果为 abcd,而(abc)+d 匹配结果为 abcd、abcabcd 等

元字符

^,可以匹配字符串开始位置,^a --> 必须开头为a,如ab等

$,可以匹配字符串结尾位置,b$ --> 必须结尾为b,如ab等

. ,可以匹配除换行符以外的任意字符

\b,可以匹配单词边界(开始字符为单词与空格交界处),如 \bam\b 匹配 "i am fine" 中的 am

\w,可以匹配字母、数字、下划线(有时可汉字等?),基本等价于 [^A-Za-z0-9_]

\s,可以匹配任意的空白符(空格),如 \w\s\w,可以匹配 a b

\d,可以匹配数字,如 \d\d\d-\d\d\d,可以匹配 123-456

[abc],可以匹配包含括号内元素的字符,特殊有[a-z]、[A-Z]、[0-9]等

(),分组,使括号里为一体

|,或,有其一即可

转义字符: \

?=n,可以匹配任何其后紧接着字符串n的字符串

反义字符

\B,可以匹配非单词边界(开始字符在单词内部),如 \Bin\B 匹配 “i am fine” 中的 in

\W,可以匹配非字母、数字、下划线

\S,可以匹配非空白符(空格)

\D,可以匹配非数字

[^abc],可以匹配除了ABC之外的字符

?!n,可以匹配任何其后没有紧接着字符串n的字符串

模式修正符

i:ignore 不区分大小写的匹配,如:/abc/i,匹配abc、ABc等

g:global 表示全局匹配,是,则从左到右至结尾,每个符合条件均记录;否,则从左到右,第一个符合条件即结束

m:more 将字符串视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束,如,g与m搭配使用

>> var str = "abcggab\nabcoab";
>> var preg1 = /^abc/gm;
>> str.match(preg1)
<< (2) ["abc", "abc"] // 以abc开头的行
>> var preg2 = /ab$/gm;
>> str.match(preg2)
<< (2) ["ab", "ab"] // 以ab结尾的行

s:特殊字符.(圆点)本是匹配除换行符\n之外的任何单字符,此模式.中包含换行符,如/b./s,匹配b/na

x:将模式中的空白忽略

A:强制从目标字符串开头匹配,如:/abc/A,匹配abcde,不能匹配deabc

D:如果使用$限制结尾字符,则不允许结尾有换行,如:/abc/D,不能匹配deabc\n

U:只匹配最近的一个字符串,不重复匹配,相当于去贪婪,如:/a(.*?)c/ 和 /a.*c/U 等价,匹配abc

e:配合函数preg_replace()使用

JS使用正则表达式

let reg = /正则规则/模式修正符;
reg.match(value); // 这个方法有点像 exec,但 exec 是 RegExp 对象的方法;match 是 String 对象的方法

 RegExp对象

https://www.w3school.com.cn/js/js_obj_regexp.asp

let reg = new RegExp("正则规则","模式修正符");
>> let patt1 = new RegExp("e");

// 检索字符串中的指定值。返回值是 true 或 false
>> patt1.test("The best things in life are free")
<< true

// 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null
>> patt1.exec("The best things in life are free")
<< ["e", index: 2, input: "The best things in life are free", groups: undefined]

// 既可以改变检索模式,也可以添加或删除第二个参数
>> patt1.compile("d"); 
<< /d/
>> patt1.test("The best things in life are free")
<< false

匹配工具

https://rubular.com/

https://pan.baidu.com/s/19Yn49

参考文章

https://www.cnblogs.com/zery/p/3438845.html

 https://www.runoob.com/regexp/regexp-syntax.html

http://www.360doc.com/content/18/0816/09/57605256_778653884.shtml