正则表达式

正则表达式语法

/匹配主体/[修饰符]

常见修饰符有以下几种

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

posted @ 2023-04-05 22:23  突破铁皮  阅读(124)  评论(0编辑  收藏  举报