正则表达式基础知识总结
时间:2007-12-21 来源:NKLOVERENE
1. 正则表达式是什么
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。简单说:正则表达式是用于进行文本匹配的工具。
2. 元字符(metacharacter)
\b 是代表着单词的开头或结尾,也就是单词的分界处。\b 匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w
. 匹配除了换行符以外的任意字符
\d 匹配任意的数字(0~9)
\s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等
\w 匹配字母或数字或下划线或汉字等
^ 匹配要用来查找的字符串的开头,除非 ^ 在方括号表达式中使用,此时它表示不接受该字符集合
$ 匹配输入字符串的结尾位置
3. 如果你想查找元字符本身的话,就要使用转义字符\
4. 限定符
* 它代表的不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复出现任意次以使整个表达式得到匹配,可能是0次
+ 匹配重复1次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
5. 匹配没有预定义元字符的字符集合
只需要在中括号里列出它们就行了:
[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)(英文语句通常只以这三个标点结束)
也可以轻松地指定一个字符范围,像[0-9]代表的含意与\d就是完全一致的:一位数字,同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)
6. 反义代码
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
7. 正则表达式里的替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用 | 把不同的规则分隔开
使用替换时,顺序是很重要的。原因是匹配替换时,将会从左到右地测试每个分枝条件,如果满足了某个分枝的话,就不会去管其它的替换条件了
8. 子表达式
用()括起来就是一个字表达式,用法上与单个字符没有区别
9. 后向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推;
后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本;
也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?\w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k
10. ()的其他用处
捕获:
(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
11. 零宽断言 与 负向零宽断言
用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(断言),因此它们也被称为零宽断言
(?=exp) 匹配exp前面的位置 。也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
(?
操作符
描述
\
转义符
(), (?:), (?=), []
圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}
限定符
^, $, \anymetacharacter
位置和顺序
|
“或”操作
相关阅读 更多 +
排行榜 更多 +