没有合适的资源?快使用搜索试试~ 我知道了~
正则表达式的详细介绍
4星 · 超过85%的资源 需积分: 0 1 下载量 85 浏览量
2010-01-20
22:07:32
上传
评论
收藏 34KB DOCX 举报
温馨提示
试读
11页
本文详细介绍了正则表达式的使用方法,通过本文让我们学习正则表达式的使用!
资源详情
资源评论
资源推荐
正则表达式
所属分类: 基本物理概念 数学 数学公式 计算机技术 计算机术语 计算机编程
提问 添加摘要
1. 引子
目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix 等),
HP 等操作系统,PHP,C#,Java 等开发环境,以及很多的应用软件中,都可以看到正则
表达式的影子。
正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失
强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努
力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。
例子: ^.+@.+\..+$
这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。
继续阅读本文将让你也可以自由应用这样的代码。
注意:这里的第 7 部分跟前面的内容看起来似乎有些重复,目的是把前面表格里的部
分重新描述了一次,目的是让这些内容更容易理解。
2. 正则表达式的历史
正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren
McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网
络。
1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础
上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表
达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。
随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期
研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是
Unix 中的 qed 编辑器。
如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于
文本的编辑器和搜索工具中的一个重要部分。
正则表达式萌芽于 1940 年代的神经生理学研究,由著名数学家 Stephen Kleene 第一个
正式描述。具体地说,Kleene 归纳了前述的神经生理学研究,在一篇题为《正则集代
数》的论文中定义了“正则集”,并在其上定义了一个代数系统,并且引入了一种记号系统
来描述正则集,这种记号系统被他称为“正则表达式”。在理论数学的圈子里被研究了几十
年之后,1968 年,后来发明了 UNIX 系统的 Ken Thompson 第一个把正则表达式用于计
算机领域,开发了 qed 和 grep 两个实用文本处理工具,取得了巨大成功。在此后十几年
里,一大批一流计算机科学家和黑客对正则表达式进行了密集的研究和实践。在 1980 年
代早期,UNIX 运动的两个中心贝尔实验室和加州大学伯克利分校分别围绕 grep 工具对正
则表达式引擎进行了研究和实现。与之同时,编译器“龙书”的作者 Alfred Aho 开发了
Egrep 工具,大大扩展和增强了正则表达式的功能。此后,他又与《C 程序设计语言》的
作者 Brian Kernighan 等三人一起发明了流行的 awk 文本编辑语言。到了 1986 年,正
则表达式迎来了一次飞跃。先是 C 语言顶级黑客 Henry Spencer 以源代码形式发布了一
个用 C 语言写成的正则表达式程序库(当时还不叫 open source),从而把正则表达式的
奥妙带入寻常百姓家,然后是技术怪杰 Larry Wall 横空出世,发布了 Perl 语言的第一个
版本。自那以后,Perl 一直是正则表达式的旗手,可以说,今天正则表达式的标准和地位
是由 Perl 塑造的。Perl 5.x 发布以后,正则表达式进入了稳定成熟期,其强大能力已经征
服了几乎所有主流语言平台,成为每个专业开发者都必须掌握的基本工具。
3. 正则表达式定义
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个
串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
列目录时, dir *.txt 或 ls *.txt 中的*.txt 就不是一个
正则表达式,因为这里*与正则式的*的含义是不同的。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文
字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
3.1 普通字符
由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写
字母字符,所有数字,所有标点符号以及一些符号。
3.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.3 特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如上面说的"*.txt"中的*,简单的说就
是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在
其前加一个\。ls \*.txt。正则表达式有以下特殊字符。
特别字
符说明
$
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\
n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( )
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,
请使用 \( 和 \)。
*
匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
.
匹配除换行符 \n 之外的任何单字符。要匹配 .,请使用 \。
[
标记一个中括号表达式的开始。要匹配 [,请使用 \[。
?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n'
匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^
匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集
合。要匹配 ^ 字符本身,请使用 \^。
{
标记限定符表达式的开始。要匹配 {,请使用 \{。
|
指明两项之间的一个选择。要匹配 |,请使用 \|。
构造正则表达式的方法和创建数学表达式的方法一
样。也就是用多种元字符与操作符将小的表达式结合在
一起来创建更大的表达式。正则表达式的组件可以是单
个的字符、字符集合、字符范围、字符间的选择或者所
有这些组件的任意组合。
3.4 限定符
剩余10页未读,继续阅读
flovemeimei
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Ruby基于Ruby的MKS rebase脚本 Ruby语言基础
- 基于GPT+Pyhon开发的网页游戏,类似于最火的文字游戏《人生重开模拟器》源码
- 基于qt+C++实现u盘插拔检测.+源码(毕业设计&课程设计&项目开发)
- rust开发封装的windows gui源码
- checkpoint.zip
- 无人机姿态和轨迹跟踪控制-反步控制方法
- 基于Qt+opencv+C++实现图像旋转+自动&&手动+直线检测,角度计算+界面操作+源码(期末大作业&课程设计&项目开发)
- Object-CC++对象库,实现类似于Java的Object类的Object
- 基于servlet的简单游戏管理系统
- 广工基于Libero的数字逻辑设计仿真及验证实验报告
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1