正则表达式
02 July 2014
正则表达式是传说中黑客的必备技能,也在知道创宇技能表里,之前看过一些,每次都记不住,这次记到这里,忘记了回来看好了。
正则表达式有几个用途:用于验证输入、通过grep
查看日志、匹配HTML里面的标签。
正则表达式验证工具Kodos http://kodos.sourceforge.net/
# | 正则表达式 | 解释 | ||||
1 | hi |
最常见的查找方式,可以查找任何包含hi 这两个连续字符的字符 |
||||
2 | \b |
【元字符】代表单词的开头或结尾,也就是单词的分界处。只代表位置,不代表字符 | ||||
3 | * |
【元字符】【重复】代表数量,它前面的字符可以重复任意次来匹配 | ||||
4 | . |
【元字符】【重复】表示除了换行符以外的任意一个字符 | ||||
5 | \d |
【元字符】表示一位数字,大括号表示两个连续数字 | ||||
6 | \s |
【元字符】任意的空白符(space),包括空格,制表符(Tab),换行符,中文全角空格等 | ||||
7 | \w |
【元字符】匹配字母或数字或下划线或汉字等(word) | ||||
8 | ^ |
【元字符】和\b 类似,表示字符串开始位置 |
||||
9 | $ |
【元字符】和\b 类似,表示字符串结束位置 |
||||
10 | \ |
【字符转义】查找元字符本身时使用 | ||||
11 | + |
【重复】重复一次或更多次 | ||||
12 | ? |
【重复】前面的字符重复零次或一次 | ||||
13 | {n} |
【重复】重复n次 | ||||
14 | {n,} |
【重复】重复n次或更多次 | ||||
15 | {n,m} |
【重复】重复n到m次 | ||||
16 | [] |
【范围】里面填入候选集合,这表示存在于集合中的一个字符。[aeiou] 就匹配任何一个英文元音字母;[0-9] 表示0到9之间任意一个数字 |
||||
17 | | |
【分枝条件】满足其中任意一种规则都应该当成匹配。\d{5}-\d{4}|\d{5} 可以认为存在优先级,| 优先级高于- |
||||
18 | \W |
【反义】匹配任意不是字母,数字,下划线,汉字的字符 | ||||
19 | \S |
【反义】匹配任意不是空白符的字符 | ||||
20 | \D |
【反义】匹配任意非数字的字符 | ||||
21 | \B |
【反义】匹配不是单词开头或结束的位置 | ||||
22 | [^x] |
【反义】匹配除了x以外的任意字符 | ||||
23 | (exp) |
【后向引用】【捕获】匹配exp,并捕获文本到自动命名的组里 | ||||
24 | (?<name>exp) |
【后向引用】【捕获】匹配exp,并捕获文本到名称为name的组里,也可以写成(?’name’exp) | ||||
25 | (?:exp) |
【后向引用】【捕获】匹配exp,不捕获匹配的文本,也不给此分组分配组号 | ||||
26 | (?=exp) |
【零宽断言】匹配exp前面的位置 | ||||
27 | (?<=exp) |
【零宽断言】匹配exp后面的位置 | ||||
28 | (?!exp) |
【零宽断言】匹配后面跟的不是exp的位置 | ||||
29 | (?<!exp) |
【零宽断言】匹配前面不是exp的位置 | ||||
30 | *? |
【懒惰限定符】重复任意次,但尽可能少重复 | ||||
31 | +? |
【懒惰限定符】重复1次或更多次,但尽可能少重复 | ||||
32 | ?? |
【懒惰限定符】重复0次或1次,但尽可能少重复 | ||||
33 | {n,m}? |
【懒惰限定符】重复n到m次,但尽可能少重复 | ||||
34 | {n,}? |
【懒惰限定符】重复n次以上,但尽可能少重复 | ||||
35 | (?'group') |
【递归匹配】把捕获的内容命名为group,并压入堆栈(Stack) | ||||
36 | (?'-group') |
【递归匹配】从堆栈上弹出最后压入堆栈的名为group的捕获内容 | ||||
37 | (?(group)yes|no) |
【递归匹配】如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分 | ||||
38 | (?!) |
【递归匹配】零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败 |
正则表达式 | 解释 | |||
^\d{5,12}$ |
QQ号必须为5位到12位数字 | |||
^\w+ |
匹配一行的第一个单词 | |||
\(?0\d{2}[) -]?\d{8} |
(010)88886666,或022-22334455,或02912345678 | |||
0\d{2}-\d{8}|0\d{3}-\d{7} |
8位本地号(如010-12345678)和7位本地号(0376-2233445) | |||
(\d{1,3}\.){3}\d{1,3} |
IP地址匹配 | |||
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) |
||||
\b(\w+)\b\s+\1\b |
匹配重复的单词 | |||
\b\w+(?=ing\b) |
匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I’m singing while you’re dancing.时,它会匹配sing和danc |
参考文献
原文链接:正则表达式,转载请注明来源!
–EOF–