1. 简介与工具
正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境
McTracer:支持将正则导成对应的语言如java C# js等同时转义
在线测试网址:http://rubular.com/
2. 正则字符
1. 元字符
定位
“^” : 匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。
“$” : 匹配行或字符串的结尾
“\b”: 不会消耗任何字符只匹配一个位置,常用于匹配单词边界—— 如从字符串中”This is Regex”匹配单独的单词 “is” 正则可以写成 “\bis\b”
匹配
“\d”: 匹配数字
“\w”:匹配字母,数字,下划线
“\s”:匹配空格
“.”:匹配除了换行符以外的任何字符
“[abc]”: 字符组 匹配包含括号内元素的字符,还可以范围匹配[a-z]
对于反义只需要编程大写就可以,字符串匹配加^。如:
“\B” 非边界
“[^abc]” 匹配除了abc以外的任意字符
2. 量词
贪婪(贪心) 如”*”字符 贪婪量词会首先匹配整个字符串,如果失败则不断回退一个字符,直到找到匹配的内容或者没有字符可以回溯。相比下面两种贪婪量词对资源的消耗是最大的。
至少出现1次
占有 如”+” 占有量词会覆盖事个目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,不会回溯。
可以出现任意次
懒惰(勉强) 如 “?” 懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。
最多出现1次
“{n}” 重复n次。如”a{3}”
“{n,m}” 重复n到m次
“{n,}” 重复n次或更多次
3. 进阶
1. 捕获分组/反向引用
- 对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
- 注意后面的重复是对匹配结果的重复而不是对规则的重复
- 可以使用非捕获元字符 ?:、?= 或 ?! 来重写捕获,忽略对相关匹配的保存。
?: 是非捕获元
?=正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串
?!负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
2. 非打印字符
非打印字符的转义序列:
字符 | 描述 |
---|---|
\cx | 匹配由x指明的控制字符。例如,\cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ |
\r | 匹配一个回车符。等价于 \x0d 和 \cM |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] |
\t | 匹配一个制表符。等价于 \x09 和 \cI |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK |
3. 其他规则
- 通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从”贪心”表达式转换为”非贪心”表达式或者最小匹配。
- 正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。
- 表达式的结尾处的不区分大小写 i 标记指定不区分大小写。
多行标记指定换行符的两边可能出现潜在的匹配。 - 要匹配特殊功能字符本身,在前面加上转义字符\
4. 代码实例
var str = "http://www.runoob.com:80/html/html-tutorial.html";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
for (var i = 0; i < arr.length ; i++) {
document.write(arr[i]);
document.write("<br>");
}
保存结果的arr是字符串数组,这段程序实现了分类URL信息的功能
参考:
http://www.cnblogs.com/zery/p/3438845.html
http://www.runoob.com/regexp/regexp-syntax.html