0%

regex

Regex

Character

Meta

1
2
3
4
5
6
7
8
9
10
11
12
13
.:匹配任意字符(除了换行符`\n`)
-:字符范围连接符
^:排除多个字符
^:匹配开头
$:匹配结尾
\:转义符
|:或
?:重复匹配字符或者表达式0次或1次
*:重复匹配字符或者表达式0次或多次
+:重复匹配字符或者表达式1次或多次
():子表达式
[]:字符类
{}:重复匹配

Wildcard

  • .:匹配任一字符(除了换行符\n
  • [a-z]:字母
  • [^a-z]:非字母
  • [0-9]:数字
  • [^0-9]:非数字
  • [a-z0-9_]:字母、数字、下划线
  • [^a-z0-9_]:非(字母、数字、下划线)
  • [a-z\d_]:字母、数字、下划线
  • [a-z\d\s]:字母、数字、空白符
  • [abc09]:字母(a或b或c)、数字(0或9)
  • \d:数字
  • \D:非数字
  • \s:空白符
  • \S:非空白符
  • \w:单词(字母、数字、下划线)
  • \W:非单词(字母、数字、下划线)

ps: \A 不是代表非字母(Alphabet)的意思,而是字符串的开头

Class

  • [:ascii:]:ASCII字符
  • [:word:]:字母、数字、下划线
  • [:alnum:]:字母和数字
  • [:alpha:]:字母
  • [:upper:]:大写字母
  • [:lower:]:小写字母
  • [:digit:]:数字
  • [:xdigit:]:十六进制数字
  • [:cntrl:]:控制字符
  • [:print:]:打印字符
  • [:graph:]:可视字符(不包含空白字符的打印字符)
  • [:blank:]:空白符(包含空格符、水平制表符)
  • [:space:]:空白符(包含空格符、回车符、换行符、换页符、水平制表符、垂直制表符)
  • [:punct:]:标点字符

Blank

  • \s:匹配任何空白字符,包括空格、制表符、换页符等等,等价于 [ \t\v\r\n\f]
  • \x20:匹配一个空格
  • \t:匹配一个制表符
  • \r:匹配一个回车符
  • \n:匹配一个换行符

Boundary

  • ^:匹配开头(字符串开头或者多行模式时的每行开头)
  • $:匹配结尾(字符串结尾或者多行模式时的每行结尾)
  • \b:匹配单词边界
  • \B:匹配非单词边界
  • \A:匹配字符串的开头
  • \Z:匹配字符串的结尾或者换行符
  • \z:匹配字符串的结尾

边界符是零宽度字符

Expression

Repeat

  • ?:重复匹配0次或1次
  • *:重复匹配0次或多次
  • +:重复匹配1次或多次
  • {n}:重复匹配n次
  • {m,n}:至少重复匹配m次,最多重复匹配n次
  • {m,}:至少重复匹配m次
  • {,n}:最多重复匹配n次

Assertion

  • ?=:肯定式向前查看
  • ?!:否定式向前查看
  • ?<=:肯定式向后查看
  • ?<!:否定式向后查看

ps:正则匹配时字符串的右边是前,左边是后

Grouping

  • (\d*):捕获分组
  • (?<name>\d*):命名分组(python中是(?P<name>\d*)
  • (?:\d*):非捕获分组

ps:0号分组是整个表达式

Mode

  • ?:贪婪模式
  • *:贪婪模式
  • +:贪婪模式
  • {n}:贪婪模式
  • {m,n}:贪婪模式
  • ??:非贪婪模式
  • *?:非贪婪模式
  • +?:非贪婪模式
  • {n}?:非贪婪模式
  • {m,n}?:非贪婪模式

Flag

  • 全符匹配(DOTALL):让点号(.)还能匹配换行符(\n)(默认是不匹配换行符)
  • 多行匹配(MULTILINE):让^$匹配还能每一行的开头和结尾(默认是只匹配字符串的开头和结尾)
  • 全局匹配(GLOBAL):查找所有匹配项

ps:DOTALL和MULTILINE可以一起使用
ps:匹配换行符可以通过DOTALL实现,也可以通过 [\s\S] 或者 [\d\D] 或者 [\w\W] 来实现

  • i:忽略大小写
  • s:全符匹配
  • m:多行匹配
  • g:全局匹配
  • u:开启完整的unicode支持

java

python

javascript

Other

只想买包辣条