没有合适的资源?快使用搜索试试~ 我知道了~
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 所有语言通用的规则
资源推荐
资源详情
资源评论
目录
本文目标
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页未读,继续阅读
资源评论
xuyang844175181
- 粉丝: 9
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功