正则表达式
正则表达式(英文:Regular Expression) 在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能 强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表 达式通常缩写成“regex”,单数有 regexp、regex,复数有regexps、regexes、regexen。
基 本概念
一个正则表达式通常被称为一个模式 (pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。例如:Handel、Händel 和 Haendel 这三个字符串,都可以由“H(a|ä|ae)ndel
”这个模式来描述。大部分正则表达式的形式都有如下的结构:
- 选择
- |
- 竖直分隔符代表选择。例如“
gray|grey
”可以匹配grey或gray。
- 竖直分隔符代表选择。例如“
- 数量限定
- 某个字符后的数量限定符用来限定前面这个字符允许出现的个数。最常见的数量限定符包括“+”、“?”和“*” (不加数量限定则代表出现一次且仅出现一次):
- +
- 加号代表前面的字符必须至少出现一次。(1次、或多次)。例如,“
goo+gle
”可以匹配google、gooogle、goooogle等;
- 加号代表前面的字符必须至少出现一次。(1次、或多次)。例如,“
- ?
- 问号代表前面的字符最多只可以出现一次。(0次、或1次)。例如,“
colou?r
”可以匹配color或 者colour;
- 问号代表前面的字符最多只可以出现一次。(0次、或1次)。例如,“
- *
- 星号代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,“
0*42
”可以匹配42、042、0042、00042等。
- 星号代表前面的字符可以不出现,也可以出现一次或者多次。(0次、或1次、或多次)。例如,“
- 匹配
- 圆括号可以用来定义操作符的范围和优先度。例如,“
gr(a|e)y
”等价于“gray|grey
”,“(grand)?father
” 匹配father和grandfather。
上述这些构造子都可以自由组合,因此,“H(ae?|ä)ndel
”和“H(a|ae|ä)ndel
” 是相同的。
精确的语法可能因不同的工具或程序而异。
![](http://img.zemanta.com/pixy.gif?x-id=9ebbf290-e1bb-8332-b9a7-b311d58f733e)