正则表达式

🌳basic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/a.c/ -> aac、abc、acc、adc
/a*b/ -> "b""ab""aab""aaab"
/a+b/ -> "ab""aab""aaab"
/colou?r/ -> "color""colour"

用户名由若干个字母、数字、下划线和中划线组成,所以需要用到 + 表示 1 次或多次出现
[a-zA-Z0-9_-]+

匹配 iframe 标签
/<iframe(([\s\S])*?)<\/iframe>/

匹配所有 img 标签
/<img.*?src="(.*?)".*?\/?>/gi

中括号表达式 匹配字符组的一个列表
/Chapter [1-5]/
/Chapter [12345]/ -> Chapter 1Chapter 2Chapter 3Chapter 4Chapter 5

[!--]
[!-~]
/Chapter [^1-5]/
/[A-Za-z0-9]/

/^(Chapter|Section) [1-9][0-9]{0,1}$/

\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b"可以匹配"never"中的"er",但不能匹配"verb"中的"er"。
\B 匹配非单词边界。“er\B"能匹配"verb"中的"er",但不能匹配"never"中的"er"

\n 匹配一个换行符。等价于\x0a和\cJ。
\r 匹配一个回车符。等价于\x0d和\cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]

\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]"。
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]"

🌳常用

reference

regexsucha
在线测试reg

1
2
3
4
5
6
7
8
9
10
11
汉字(字符)	[\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内) [^\x00-\xff]
空白行 \n\s*\r
\n\n(editplus)
^[\s\S ]*\n
用户名 /^[a-z0-9_-]{3,16}$/
密码 /^[a-z0-9_-]{6,18}$/
密码2 (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$ (由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上)
URL /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 或 [a-zA-z]+://[^\s]*
IP 地址 /((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ 或 ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

🌳(pattern)

匹配pattern并获取这一匹配。所获取的匹配可以

  • 从产生的Matches集合得到,
  • 在VBScript中使用SubMatches集合,
  • 在JScript中则使用$0…$9属性。

要匹配圆括号字符,请使用“(“或”)"。

🌳正向反向匹配

Windows :Windows 3.1、Windows 95 、Windows 98 和 Windows NT

🌳(?:pattern)

匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)"来组合一个模式的各个部分是很有用。
例如"industr(?:y|ies)"就是一个比"industry|industries"更简略的表达式。

1
Windows (?:95 |98 |NT ) -> Windows 95 Windows 98 Windows NT 

🌳(?=pattern)

正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
例如,“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows"。
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

Windows (?=95 |98 |NT ) -> Windows 95 Windows 98 Windows NT

🌳(?!pattern)

正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
例如“Windows(?!95|98|NT|2000)“能匹配"Windows3.1"中的"Windows”,但不能匹配"Windows2000"中的"Windows"。
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

Windows (?!95 |98 |NT ) -> WindowsWindows 3.1

🌳(?<=pattern)

反向肯定预查,与正向肯定预查类拟,只是方向相反。
例如,“(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。

🌳(?<!pattern)

反向否定预查,与正向否定预查类拟,只是方向相反。
例如“(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。

Here is a footnote reference,[^1] and another.[^longnote]

🌳vim 相关

reference

Examples

🌳vim 每 5行 合并为一行

1
2
3
4
5
6
7
8
9
10
11
nomarl 模式

输入 qa 进入录制模式

按5次 J 合并 5行

按j 跳下一行

输入 q 退出录制模式

输入 3000@a 表示 重复执行3000次录制操作

🌳vim 匹配 #### 数字数字. 并前后插入换行符

& 表示使用匹配串

:%s/#### \d\d. /\r\r&\r\r\/

🌳vim 每10行插入 3行空行

1
2
3
4
5
6
7
8
9
10
11
normal 模式下 yy辅助一行空行

输入 qa 进入录制模式

按10次 j 跳过10行

按3次 P 插入拷贝空行

输入q 退出录制模式

输入 150@a 表示重复执行 150次录制操作

🌳Endnotes

[^1]: Here is the footnote.
[^longnote]: Here’s one with multiple blocks.