学习笔记 正则表达式

Fri 28 December 2007
By lewix

::: {#msgcns!BAC70107D054E892!320 .bvMsg} 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

形式语言的角度,正则表达式能描述的语言称之为正则语言,正则语言能被确定有限状态自动机(DFA)识别,而DFA是非确定有限状态机NFA的一种极限形式。当年学编译原理时,还做过正则语言->DFA->NFA的转换。题外话一句:编译原理学得真值啊,虽然现在忘得差不多了。。

对于很复杂的正则表达式,我没有这个需求,我只需要在使用编辑器(如SourceInsight,Editplus)时,能够很快速的查找和替换。

特殊字符

t 匹配一个制表符。等价于 x09 和 cI。

f 匹配一个换页符。等价于 x0c 和 cL。

n 匹配一个换行符。等价于 x0a 和 cJ。

r 匹配一个回车符。等价于 x0d 和 cM。

s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。

S 匹配任何非空白字符。等价于 [\^ fnrtv]。

\$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 \$ 也匹配 'n' 或 'r'。要匹配 \$ 字符本身,请使用 \$。

( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。在JScript 中则使用 \$0…\$9 属性。Editplus中使用 - 9表示所获得的匹配。

*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。

+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。

.匹配除换行符 n之外的任何单字符。要匹配 .,请使用 。

?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'n' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配 "("。

\^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 \^ 字符本身,请使用 \^。

限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。

参考:

http://www.williamlong.info/archives/433.html

http://hedong.3322.org/archives/000244.html

http://soulogic.com/doc/RegularExpressions/

http://blog.joycode.com/sumtec/archive/2004/06/29/26057.aspx

以及Wiki百科 & Google :::