限定符(贪婪)
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等
. ,可以匹配除换行符以外的任意字符
,可以匹配单词边界(开始字符为单词与空格交界处),如 am 匹配 "i am fine" 中的 am
w,可以匹配字母、数字、下划线(有时可汉字等?),基本等价于 [^A-Za-z0-9_]
s,可以匹配任意的空白符(空格),如 wsw,可以匹配 a b
d,可以匹配数字,如 ddd-ddd,可以匹配 123-456
[abc],可以匹配包含括号内元素的字符,特殊有[a-z]、[A-Z]、[0-9]等
(),分组,使括号里为一体
|,或,有其一即可
转义字符:
?=n,可以匹配任何其后紧接着字符串n的字符串
反义字符
B,可以匹配非单词边界(开始字符在单词内部),如 BinB 匹配 “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 abcoab"; >> var preg1 = /^abc/gm; >> str.match(preg1) << (2) ["abc", "abc"] // 以abc开头的行 >> var preg2 = /ab$/gm; >> str.match(preg2) << (2) ["ab", "ab"] // 以ab结尾的行
s:特殊字符.(圆点)本是匹配除换行符 之外的任何单字符,此模式.中包含换行符,如/b./s,匹配b/na
x:将模式中的空白忽略
A:强制从目标字符串开头匹配,如:/abc/A,匹配abcde,不能匹配deabc
D:如果使用$限制结尾字符,则不允许结尾有换行,如:/abc/D,不能匹配deabc
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://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