正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
创新互联是一家专业提供那曲企业网站建设,专注与成都网站制作、成都网站设计、外贸营销网站建设、HTML5建站、小程序制作等业务。10年已为那曲众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
(说人话就是匹配字符串的简便方法)
本文采用regex101进行测试
限定符(Quantifier)
1) ?:即匹配该符号前的字符出现0次或者1次的文本
use出现 'use' 字符且 'd' 未出现即匹配成功,used出现'use' 字符且 'd' 出现一次也匹配成功。
2) * :即匹配该符号前的字符出现0次或者多次的文本
'p'字符出现多次则apple和apply匹配成功,未出现则allow匹配成功。两种情况前后均有'a'和'l'字符。
3)+:即匹配该符号前的字符出现1次或者多次的文本
p字符出现1次和多次的apple、apply匹配成功。
4){ } :即匹配该符号前的字符出现花括号内范围的文本(共三种情况)
① {n} :匹配出现n次的字符
② {n,m} :匹配出现n次到m次的字符
③ {n,} :匹配出现n次即以上的字符
或运算符(OR Operator)
1)(a|b):即匹配a或者b的文本
先匹配"a "的情况再匹配后面是person或者dog的情况
字符类(Character Classes)
1)[abc] :即匹配包含abc的文本 (通常与+一起使用)
包含'a' 'b' 'c' 字符的文本均匹配成功
2)[a-zA-Z]:即匹配a到z和A-Z的文本 (即匹配所有英文字符)
3)[^a-z]:即匹配不包含a到z的文本 (^代表除后续范围的匹配情况)
元字符类(Meta-characters)
\d :匹配数字字符
\D:匹配非数字字符
\w :匹配单词字符(英文、数字、下划线)
\s :匹配空白符(包含换行符、Tab)
.:匹配任意字符(换行符除外)
^ :匹配行首
$ :匹配行尾
贪婪/懒惰匹配(Greedy / Lazy Match)
* + {} 默认会去匹配尽可能多的字符
例如我们想匹配html标签 此时便为贪婪匹配,'.+'会尽可能多的去匹配字符。
解决方法便是<.+?>将贪婪匹配转化为懒惰匹配
例题实例:
1. RGB颜色值匹配
首先#进行查询,然后[]选取可能出现的a到f、A到F、0到9的可能字符,{}确定长度大小为6,最后使用\b确定边界避免未设置边界长度的#aaaaaaaa也匹配成功。
2. IPv4地址匹配
由于ip地址分四段,故我们可以使用\d+\.\d+\.\d+\.+\d+进行匹配:\d+会匹配任何长度大于1的数字,\. 代表转义后的 .
但此时匹配的结果不符合,由于ip地址需在0到255之间。观察ip地址的每一部分(共四部分)
三位数情况:
若前两位为25则第三位为0到5之间的数。
若第一位的数字为2,则第二位为0到5之间的数且第三位为0到9之间的数字即任意数字。
若第一位为0或者1,则第二位和第三位均可以为0到9间的数字即任意数字。
两位数和一位数的情况则均为任意数字即可,故在第一位为01的三位数情况的首位和末位加?代表是否存在
使用\.进行转义匹配.的情况并设置{3}匹配三次
最后在进行一次无.的匹配
在首位加\b确定边界即匹配完成