<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->
正则表达式:
正则表达式定义了由一个或多个字符串组成的集合。简单字符串也是正则表达式,它定义了由该字符串自身组成的集合。复杂的正则表达式使用字母、数字、和特殊字符来定义不同的字符串。正则表达式匹配它定义的任何字符串。
字符:
字符除换行符以外的其他任意字符。大多数字符代表他们自身,而那些不代表自身的字符称为特殊字符。如果需要特殊字符代表自身,那么需要将这些字符转义。
定界符:
定界符是指标志着正则表达式开始和结束的字符。正则表达式的定界符通常是一个特殊字符,因为该字符不代表自身,而是标志表达式的开始和结束。通用是采用'/' 作为定界符。
简单字符串:
最基本的正则表达式是只包含非特殊字符和定界符的简单字符串。只与它自身匹配。
/ring/ 、/Thursday/ 、/or not/ 等
特殊字符:
使用特殊字符使得正则表达式匹配多个字符串。包含特殊字符的正则表达式总是匹配尽可能长的字符串。
句点:
句点'.' 可以与任何字符匹配( 匹配任一单个字符) 。
/ .alk/ 、/.ing/ 等等
方括号:
方括号'[]' 用来定义一个字符来,该类与方括号内任意的单个字符匹配。左方括号后紧跟脱字符'^' 来定义的字符类与方括号内定义字符之外的任意其他单个字符匹配。使用连字符'-' 可以指定字符范围。
/[bB]ill/ 、/t[aeiou].k/ 、/# [6-9]/ 、/[^a-zA-Z]/ 等等。
星号:
星号跟随在代表某个字符的正则表达式之后,表示与该正则表达式所匹配字符的0 个或多个匹配。跟在句点后的星号的正则表达式可以匹配任意字符串。
/ab*c/ 、/ab.*c/ 、/t.*ing/ 、/[a-zA-Z]*/ 、/(.*)/ 、/([^)]*)/ 等等
脱字符和美元符号:
以脱字符'^' 开始的正则表达式只能匹配位于行首的字符串。以美元符号'$' 结尾的正则表达式只能匹配行末尾的字符串。
/^T/ 、/^+[0-9]/ 、/:$/ 等等
大于或小于符号:
以小于符号'<' 开始的正则表达式只能匹配位于字的开始的字符串。以大于符号'>' 结尾的正则表达式只能匹配字的结尾的字符串。
/<and>/ 、/<[0-9]/ 等等
转义特殊字符:
在特殊字符之前使用反斜杠可以转义除数字和圆括号 外的特殊字符。
/end/./ 、 、//*/ 、//[5/]/ 、/and//or/ 等等
规则:
最长匹配
正则表达式总是与尽可能长的字符串匹配,从行的开始尽可能地向前匹配。
空正则表达式
对于某些工具,空正则表达式代表上次使用的表达式。
括号表达式:
使用转义圆括号'/(' 和'/)' 可以将正则表达式括起来。正则表达式并不试图匹配转义的圆括号,因此带有转义圆括号的正则表达式与没有该圆括号的正则表达式匹配的字符串相同。
//(rexp/)/ 同 /rexp/ 、/a/(b*/)c/ 同/ab*c/
转义圆括号可以嵌套使用。
//([a-z]/([A-Z]*/)x/)/ 则在'3 t dMNORx7 l u' 匹配'dMNORx' ;其中第一个括号表达式匹配'dMNORx' ,第二个括号表达式与'MNOR' 匹配。
替换字符串:
可以使用特殊字符'&' 和转义数字'/n' 来代表对应替换字符串中的匹配字符串。
'&' :
在替换字符串中,符号'&' 代表搜索字符串( 正则表达式) 所匹配的字符串的值。
vim 中
:s/ [0-9][0-9]* /NN&NN/
注意上面的黑体表示与任意数字字符串匹配。
转义数字:
在搜索字符串中,括号正则表达式如'//(xyz/)/' 与不带括号的正则表达式匹配的字符串相同'/xyz/' ;在替换字符串中,转义数字'/n' 代表搜索字符串的第n 个括号正则表达式'/(' 开始匹配的字符串。
vim 中
:1,$s//([^,]*/), /(.*/)//2 /1/