参考:http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
正则表达式
(英文
:Regular Expression
)在计算机科学
中,是指一个用来描述或者匹配一系列符合某个句法
规则的字符串
的单个字符串。在很多文本编辑器
或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言
都支持利用正则表达式进行字符串操作。例如,在Perl
中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix
中的工具软件(例如sed
和grep
)普及开的。正则表达式通常缩写成“regex
”,单数
有regexp、regex,复数
有regexps、regexes、regexen。
一个正则表达式通常被称为一个模式 (pattern)
,为用来描述或者匹配一系列符合某个句法
规则的字符串
。
历史
最初的正则表达式出现于理论计算机科学
的自动控制
理论和形式化语言
理论中。在这些领域中有对计算(自动控制)的模型和对形式化语言
描述与分类的研究。1940年代
,Warren McCulloch与Walter Pitts将神经系统
中的神经元描述成小而简单的自动控制元。在1950年代
,数学家斯蒂芬·科尔·克莱尼
利用称之为“正则集合”的数学符号来描述此模型。肯·汤普逊
将此符号系统引入编辑器QED
,然后是Unix
上的编辑器ed
,并最终引入grep
。自此,正则表达式被广泛地使用于各种Unix或者类似Unix的工具,例如Perl
。
Perl正则表达式源自于Henry Spencer写的regex,它已经演化成了pcre(Perl兼容正则表达式,Perl Compatible Regular Expressions),一个由Philip Hazel开发的,为很多现代工具所使用的库。
各计算机语言之间的正则表达式的集成目前开展的很差。未来的Perl6的子项目Apocalypse的设计中已考虑到了这点。
表达式全集
正则表达式有多种不同的风格。下表是在PCRE中元字符及其在正则表达式上下文中的行为的一个完整列表:
字符
描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n
”匹配字符“n
”。“\n
”匹配一个换行符。序列“\\
”匹配“\
”而“\(
”则匹配“(
”。 |
^
匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n
”或“\r
”之后的位置。 |
$
匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n
”或“\r
”之前的位置。 |
*
匹配前面的子表达式零次或多次。例如,zo*能匹配“z
”以及“zoo
”。*等价于{0,}。 |
+
匹配前面的子表达式一次或多次。例如,“zo+
”能匹配“zo
”以及“zoo
”,但不能匹配“z
”。+等价于{1,}。 |
?
匹配前面的子表达式零次或一次。例如,“do(es)?
”可以匹配“do
”或“does
”中的“do
”。?等价于{0,1}。 |
{n
}
n
是一个非负整数。匹配确定的n
次。例如,“o{2}
”不能匹配“Bob
”中的“o
”,但是能匹配“food
”中的两个o。 |
{n
,}
n
是一个非负整数。至少匹配n
次。例如,“o{2,}
”不能匹配“Bob
”中的“o
”,但能匹配“foooood
”中的所有o。“o{1,}
”等价于“o+
”。“o{0,}
”则等价于“o*
”。 |
{n
,m
}
m
和n
均为非负整数,其中n
<=m
。最少匹配n
次且最多匹配m
次。例如,“o{1,3}
”将匹配“fooooood
”中的前三个o。“o{0,1}
”等价于“o?
”。请注意在逗号和两个数之间不能有空格。 |
?
当该字符紧跟在任何一个其他限制符(*,+,?,{n
},{n
,},{n
,m
})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo
”,“o+?
”将匹配单个“o
”,而“o+
”将匹配所有“o
”。 |
.
匹配除“\
n
”之外的任何单个字符。要匹配包括“\
n
”在内的任何字符,请使用像“[.\
n
]
”的模式。 |
(pattern)
匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(
”或“\)
”。 |
(?:pattern)
匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)
”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)
”就是一个比“industry|industries
”更简略的表达式。 |
(?=pattern)
正向预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)
”能匹配“Windows2000
”中的“Windows
”,但不能匹配“Windows3.1
”中的“Windows
”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
(?!pattern)
负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)
”能匹配“Windows3.1
”中的“Windows
”,但不能匹配“Windows2000
”中的“Windows
”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 |
x|y
匹配x或y。例如,“z|food
”能匹配“z
”或“food
”。“(z|f)ood
”则匹配“zood
”或“food
”。 |
[xyz]
字符集合。匹配所包含的任意一个字符。例如,“[abc]
”可以匹配“plain
”中的“a
”。 |
[^xyz]
负值字符集合。匹配未包含的任意字符。例如,“[^abc]
”可以匹配“plain
”中的“p
”。 |
[a-z]
字符范围。匹配指定范围内的任意字符。例如,“[a-z]
”可以匹配“a
”到“z
”范围内的任意小写字母字符。 |
[^a-z]
负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]
”可以匹配任何不在“a
”到“z
”范围内的任意字符。 |
\b
匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b
”可以匹配“never
”中的“er
”,但不能匹配“verb
”中的“er
”。 |
\B
匹配非单词边界。“er\B
”能匹配“verb
”中的“er
”,但不能匹配“never
”中的“er
”。 |
\cx
匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c
”字符。 |
\d
匹配一个数字字符。等价于[0-9]。 |
\D
匹配一个非数字字符。等价于[^0-9]。 |
\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。 |
\w
匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]
”。 |
\W
匹配任何非单词字符。等价于“[^A-Za-z0-9_]
”。 |
\xn
匹配n
,其中n
为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41
”匹配“A
”。“\x041
”则等价于“\x04&1
”。正则表达式中可以使用ASCII编码。. |
\num
匹配num
,其中num
是一个正整数。对所获取的匹配的引用。例如,“(.)\1
”匹配两个连续的相同字符。 |
\n
标识一个八进制转义值或一个向后引用。如果\n
之前至少n
个获取的子表达式,则n
为向后引用。否则,如果n
为八进制数字(0-7),则n
为一个八进制转义值。 |
\nm
标识一个八进制转义值或一个向后引用。如果\nm
之前至少有nm
个获得子表达式,则nm
为向后引用。如果\nm
之前至少有n
个获取,则n
为一个后跟文字m
的向后引用。如果前面的条件都不满足,若n
和m
均为八进制数字(0-7),则\nm
将匹配八进制转义值nm
。 |
\nml
如果n
为八进制数字(0-3),且m和l
均为八进制数字(0-7),则匹配八进制转义值nm
l。 |
\un
匹配n
,其中n
是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号
(©)。
|
分享到:
相关推荐
Microsoft Expression Blend 4是一款由微软公司推出的交互式设计工具,主要用于创建和设计丰富的用户界面,特别是为Windows平台的应用程序和网络应用程序。该软件特别适用于设计基于Silverlight的程序,Silverlight...
Expression4J是一个强大的Java表达式语言库,它允许在运行时动态评估数学和逻辑表达式。这个压缩包包含了Expression4J库所需的jar包以及相关的文档资料,帮助开发者更好地理解和使用这个库。 首先,我们来看看两个...
Expression自定义生成SQL,可链表、分组、排序、自定义。 Expression是一个可以将Expression表达式树解析成Transact-SQL的项目。只要调用者熟悉基本的Transact-SQL语法即可瞬间无忧开码,大大降低了学习Expression2...
Expression Encoder 4专业版是微软推出的一款强大的视频编码工具,专为内容创作者和专业人士设计,用于制作高质量的数字媒体内容。这款软件具有多种高级功能,能够处理不同类型的媒体文件,并将其编码为适合网络分发...
赠送jar包:spring-expression-5.2.0.RELEASE.jar; 赠送原API文档:spring-expression-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-expression-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...
标题中的“Microsoft.Expression.Interactions 5.0.5.0”和描述中的“System.Windows.Interactivity 5.0.5.0”均指向一个关键组件,即微软Expression交互库的一个特定版本。这个库是用于WPF(Windows Presentation ...
标题 "Microsoft.Expression.Encoder.Pro.4_downcc.zip" 指的是 Microsoft Expression Encoder Pro 4 的一个下载压缩包。这个软件是微软推出的一款专业级的视频编码工具,主要用于高质量的视频编码、屏幕录制以及...
Microsoft Expression Studio 2是一套由微软发布的用于创建、设计网页和用户界面的工具集合,主要包括Expression Blend 2、Expression Design 2、Expression Web 2等组件。 ### Microsoft Expression Studio 2 概览...
Regular expression 具有可以表达出难以描述、複杂、但是却有特殊规则的字串的功能,所以许多的 UNIX 工具程式都有支援 Regular expression 的功能。例如 ex 、 vi 、 sed 、 awk 、 grep 、 emacs 等等都有支援。...
Expression表达式树缓存 Expression表达式树序列化
本主题将详细探讨如何使用C#的表达式(Expression)来实现对象的深拷贝。 首先,我们需要理解什么是表达式树(Expression Tree)。表达式树是一种表示代码的抽象数据结构,它能够让我们以数据的形式查看和操作代码...
Microsoft Expression Encoder 4 微软出品流媒体编码工具,用于搭建流媒体服务器。
本书名为《Pro Expression Blend 4》,是一本专注于Expression Blend软件的学习指南,适合开发者阅读。英文版的电子书内容详实,涵盖了该软件的核心概念和使用技巧,不是简单的扫描版图书,因此可以预见到其中包含了...
Microsoft Expression Studio是一套令人印象深刻的工具,用于...这套令人印象深刻的套装包括4种不同的软件应用程序,分别是MS Expression Web 4, Expression Blend 4, Expression Encoder 4 Pro和Expression Design 4。
开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE...
在IT领域,"Expression"可能指的是多种含义,但在这个场景中,由于标签是"字体",我们可以推测这里的"Expression"可能是指一种特定的字体或相关的文本处理技术。字体是计算机图形学和排版中的一个重要元素,它决定了...
Microsoft expression blend 3 sdk 英文安装包
赠送jar包:spring-expression-5.3.10.jar; 赠送原API文档:spring-expression-5.3.10-javadoc.jar; 赠送源代码:spring-expression-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-expression-5.3.10.pom;...
Expression Web 教程Expression Web 教程