Skip to content
cym edited this page Dec 25, 2017 · 6 revisions

glob

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。

  1. 星号(*)匹配零个或多个任意字符;
  2. [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  3. 问号(?)只匹配一个任意字符;
  4. 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
  5. 使用两个星号(*) 表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。

正则速查

[abc] 匹配中括号中的单个字符,如a或b或c

[^abc] 匹配除了a、b、c等字符的其他单个字符

[a-z] 匹配一个字符范围,如a到z

[a-zA-Z] 匹配一个字符范围,如a-z 或 A-Z

^ 匹配行的开始

$ 匹配行的结束

\A 匹配一个字符串的开始

\z 匹配一个字符串的结束

. 匹配任意单个字符

\s 匹配空白字符,如空格,TAB

\S 匹配非空白字符

\d 匹配一个数字

\D 匹配非数字

\w 匹配一个字母

\W 匹配非字母

\b 匹配字符边界

(...) 引用所有括号中的内容

(a|b) a或者b

a? 零个或1个a

a* 零个或多个a

a+ 1个或多个a

a{3} 3次重复的a

a{3,} 3次或3次以上重复的a

a{3,6} 3到6次重复的a

修正符

/g 查找所有可能的匹配

/i 不区分大小写

/m 多行匹配

/s 单行匹配

/x 忽略空白模式

/e 可执行模式,PHP专有

/A 强制从目标字符串开头匹配

/D 使用$限制结尾字符,则不允许结尾有换行

/U 只匹配最近的一个字符串;不重复匹配

常用正则表达式

中国身份证号码

[1-8]\d{5}((18)|(19)|(20))?\d{2}[0-1]\d[0-3]\d{4}[\dx]?

IPv4 地址

(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))

URL 地址

https?://[-\w.]+(:\d+)?(/([\w/_.]*)?)?

电子邮箱

(\w+\.)*\w+@(\w+\.)+[A-Za-z]+

HTML 注释

<!-{2,}.*?-{2,}>

C 注释

((//.*)|(/\*[\s\S]*?\*/))

利用反向引用做替换

匹配:

^(\*) ([0-9])(.)

替换:

$2.

即把类似"* 2 "的模式替换成"2. "

vim 批量加注释

:119,133s/^/#/g
Clone this wiki locally