没有合适的资源?快使用搜索试试~ 我知道了~
正则表达式入门到精通
试读
14页
需积分: 0 1 下载量 95 浏览量
更新于2013-01-13
收藏 643KB DOC 举报
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
所有语言通用的规则
目录
本文目标
1. 如何使用本教程
2. 正则表达式到底是什么东西?
3. 入门
4. 测试正则表达式
5. 元字符
6. 字符转义
7. 重复
8. 字符类
9. 分枝条件
10.反义
11.分组
12.后向引用
13.零宽断言
14.负向零宽断言
15.注释
16.贪婪与懒惰
17.处理选项
18.平衡组 / 递归匹配
19.还有些什么东西没提到
20.联系作者
21.网上的资源及本文参考文献
22.更新纪录
本文目标
30 分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页
里使用它。
如何使用本教程
最重要的是——请给我 30
分钟
,如果你没有使用正则表达式的经验,请不要试图在 30
秒
内入门
——除非你是超人 :)
别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有
你想像中的那么困难。当然,如果你看完了这篇教程之后,发现自己明白了很多,却又几乎
什么都记不得,那也是很正常的——我认为,没接触过正则表达式的人在看完这篇教程后,
能把提到过的语法记住 80%以上的可能性为零。这里只是让你明白基本的原理,以后你还
需要多练习,多使用,才能熟练掌握正则表达式。
除了作为入门教程之外,本文还试图成为可以在日常工作中使用的正则表达式语法参考手册。就
作者本人的经历来说,这个目标还是完成得不错的——你看,我自己也没能把所有的东西记下来,
不是吗?
清除格式 文本格式约定:专业术语 元字符/语法格式 正则表达式 正则表达式中的一部分(用
于分析)对其进行匹配的源字符串 对正则表达式或其中一部分的说明
隐藏边注 本文右边有一些注释,主要是用来提供一些相关信息,或者给没有程序员背景的读者解
释一些基本概念,通常可以忽略。
正则表达式到底是什么东西?
字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉
字等等。字符串是 0 个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个
正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则
表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过 Windows/Dos 下用于文件查找的通配符(wildcard),也就是*和?。如果你想
查找某个目录下的所有的 Word 文档的话,你会搜索*.doc。在这里,*会被解释成任意的字
符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能
更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用
来查找所有以 0 开头,后面跟着 2-3 个数字,然后是一个连字号“-”,最后是 7 或 8 位数字的
字符串(像 010-12345678 或 0376-7654321)。
入门
学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。下面给
出了不少简单的例子,并对它们作了详细的说明。
假设你在一篇英文小说里查找 hi,你可以使用正则表达式 hi。
这几乎是最简单的正则表达式了,它可以精确匹配这样的字符串:由两个字符组成,前一个
字符是 h,后一个是 i。通常,处理正则表达式的工具会提供一个忽略大小写的选项,如果选
中了这个选项,它可以匹配 hi,HI,Hi,hI 这四种情况中的任意一种。
不幸的是,很多单词里包含 hi 这两个连续的字符,比如 him,history,high 等等。用 hi 来查找
的话,这里边的 hi 也会被找出来。如果要精确地查找 hi 这个单词的话,我们应该使用\bhi\
b。
\b 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着
单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换
行来分隔的,但是\b 并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
如果需要更精确的说法,\b 匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个
不是或不存在)\w。
假如你要找的是 hi 后面不远处跟着一个 Lucy,你应该用\bhi\b.*\bLucy\b。
这里,.是另一个元字符,匹配除了换行符以外的任意字符。*同样是元字符,不过它代表的
不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复使用任意次以使整
个表达式得到匹配。因此,.*连在一起就意味着任意数量的不包含换行的字符。现在\bhi\
b.*\bLucy\b 的意思就很明显了:先是一个单词 hi,然后是任意个任意字符(但不能是换行),最
后是 Lucy 这个单词。
换行符就是'\n',ASCII 编码为 10(十六进制 0x0A)的字符。
如果同时使用其它元字符,我们就能构造出功能更强大的正则表达式。比如下面这个例子:
0\d\d-\d\d\d\d\d\d\d\d 匹配这样的字符串:以 0 开头,然后是两个数字,然后是一个连字号“-”,
最后是 8 个数字(也就是中国的电话号码。当然,这个例子只能匹配区号为 3 位的情形)。
这里的\d 是个新的元字符,匹配一位数字(0,或 1,或 2,或……)。-不是元字符,只匹配它
本身——连字符(或者减号,或者中横线,或者随你怎么称呼它)。
为了避免那么多烦人的重复,我们也可以这样写这个表达式:0\d{2}-\d{8}。 这里\d 后面的
{2}({8})的意思是前面\d 必须连续重复匹配 2 次(8 次)。
测试正则表达式
其它可用的测试工具:
RegexBuddy
Javascript
正则表达式在线测试工具
如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式
的语法很令人头疼,即使对经常使用它的人来说也是如此。由于难于读写,容易出错,所以找一
种工具对正则表达式进行测试是很有必要的。
不同的环境下正则表达式的一些细节是不相同的,本教程介绍的是微软 .Net Framework 4.0 下正
则表达式的行为,所以,我向你推荐我编写的.Net 下的工具 正则表达式测试器。请参考该页面的
说明来安装和运行该软件。
下面是 Regex Tester 运行时的截图:
剩余13页未读,继续阅读
资源推荐
资源评论
158 浏览量
185 浏览量
2011-06-24 上传
189 浏览量
200 浏览量
2011-03-23 上传
183 浏览量
2010-05-10 上传
124 浏览量
2024-10-11 上传
2010-05-22 上传
资源评论
xuyang844175181
- 粉丝: 9
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功