正则表达式语法
/匹配主体/[修饰符]
常见修饰符有以下几种
g:全局匹配,一般正则表达式遇到了第一个匹配的就会结束,例如/aaa/,这里匹配到第一个a就结束停止匹配,而加了g修饰之后会一直匹配到字符串末尾
i:正则表达式默认区分大小写,加了i修饰时则忽略大小写,此时A和a一样
m:可以使 ^ 和 $ 匹配一段文本中每行的开始和结束位置,即不把多行看成同一个字符串,对于每个单独的一行作为匹配对象
s:正常情况下 . 符表示匹配除\n以外的所有字符,加上s修饰后则包含了\n
对于不同的修饰符可以叠加使用例如/abc/gi
常见转义字符
字符集合[]
[abc]表示匹配a,b,c中的任何一个即可,即和该集合交集不为空
[0-9]=[0123456789]
[^abc]表示对于a,b,c都不匹配,即和该集合无交集
- . 匹配除了换行符(\n)以外的任意一个字符 = [^\n]
- \w = [0-9a-Z_]
- \W = [^0-9a-Z_]
- \s = [ \t\n\v]
- \S = [^ \t\n\v]
- \d = [0-9]
- \D = [^0-9]
量词
量词一般跟在某个字符后面,表示对于该个字符进行多次匹配
{n} 匹配n次,例如A{2}=AA
{m,n} 匹配m到n次=[m,n],优先匹配n次,即可以匹配m,m+1....,n
{m,} 匹配大于等于m次,优先匹配出现的最大的次数
?={0,1} 匹配0或1次
+={1,} 匹配大于等于1次
* ={0,} 匹配大于等于0次
正则表达式匹配一般位贪婪模式优先匹配多的次数,在{}后面加?开启非贪婪模式
a{1,3}?优先匹配a
字符边界
^ ,开头匹配符,放在模板串开头,表示匹配以模板串为开头的字符串,例如^abc匹配以abc为开头的字符串
$ ,结尾匹配符,放在模板串结尾,表示匹配以模板串为结尾的字符串,abc$
\b单词边界,放在模板穿末尾,表示匹配边界为模板从字符串,即开头和结尾都要匹配的字符串,abc\b=^abc$,可以匹配abchhabc,但是不能匹配abchh和hhabc
选择表达式
通过分组来匹配多个字符串,用 | 将字符串分割开,前面字符集是匹配多个字符
abc|ig|op 表示匹配abc或ig或op
分组
(字符串),表示为一组,我们之前对于单个字符串的操作叶使用于字符组,[]除外
例如
(ab){3}表示ababab
(ab|cd){2}表示abcd,abab,cdcd,cdab
分组默认为捕获组
普通捕获组(pattren),命名捕获组(?<name>pattern)或(?'name'pattern),非捕获组: ?: 、?= 或 ?! 重写捕获组,一般以?开头的普通捕获组为非捕获组
相比于捕获组,非捕获组不捕获文本,无分组编号,不可被反向引用
引用语法为\数字,表示引用前面第几个分组,后面匹配将和前面保持一致
预搜索
正声明 “(?=…)”:是指匹配项后面字符匹配了指定字符后才会匹配
负声明 “(?!...)” :是匹配项后面字符不匹配指定字符才会匹配
(?=a)b 只能匹配ab
(?!a)b 只能匹配bb
标签:字符,abc,匹配,正则表达式,捕获,字符串,模板 From: https://www.cnblogs.com/liyiyang/p/17291149.html