正则表达式
在学习Perl的过程中,又用到了正则表达式.这儿把它总结一下. 正则表达式定义了一套由一个或者多个字符串组成的集合。一些GNU/Linux使用程序,包括vi,emacs, grep,gawk和sed,都使用正则表达式查找和替换字符串。最基本的正则表达式是一个包含非特殊字符的简单字符串,但是分割符除外。一个简单的字符串只匹配本身。正则表达式 匹配
在学习Perl的过程中,又用到了正则表达式.这儿把它总结一下.
正则表达式定义了一套由一个或者多个字符串组成的集合。一些GNU/Linux使用程序,包括vi,emacs, grep,
gawk和sed,都使用正则表达式查找和替换字符串。
最基本的正则表达式是一个包含非特殊字符的简单字符串,但是分割符除外。一个简单的字符串只匹配本身。
正则表达式 匹配 示例
/ring/ ring ring, spring, ringing, stringing
/Thrusday/ Thrusday Thursday, Thursday's
/or not/ or not or not, poor nothing
用户可以在正则表达式中使用特殊字符,以便让该正则表达式与字符串相匹配。包含一个特殊字符的正则表达式总是匹配最大的字符串,并尽可能地从每行的最开始 处(左边)开始。即贪婪(greedy),最左边最贪婪。相不像C语言的“大嘴法”
点号(.)匹配任何一个字符。如/.alk/, /.ing/分别匹配will talk, may balk和singsong, ping等
方括号[ ]定义了匹配括号中的任何一个单一的字符的字符类。如果左方括号后的第一个字符是^符号,则表示“反例”,即该方括号定义了匹配任何不在方括号内的字符集。可以使用连字号(-)来确定字符的一个范围。例如
/[bB]ill/匹配bill, Bill, billed
/t[aeiou].k/匹配talkative, stink,等
/#[6-9]/匹配#60, #8:, get #9等。
/^a-zA-Z/匹配任何一个非字母字符,如1, 7, @,.,},
星号(*)可以跟在代表表单个字符的正则表达式后面,表示所匹配的正则表达式的零次或多次出现。例如
正则表达式 匹配 示例
/ab*c/ a后面跟零个或多个b,然后是c ac, abc, abbc, debbcaabbbc
/ab.*c/ ab后面跟有零个或多个字符,然后是c abc, abxc, ab45c
/t.*ing/ 类似上例
/[a-z A-Z]*/ 只有字母和空格组成的字符串 1. any string without
/(.*)/ 在"("和")"之间尽可能长的字符串 Get (this) and (that)
/([^)]*)/ 以"("开始,“)”结束的尽可能短的字符串 (this), Get (this and that)
以^符号开始的正则表达式只能在行的开始处匹配一个字符串。类似的方式,正则表达式末尾的美元符号匹配行的末尾。^和$称为锚定。例如
/^T/ 行的开始是T
/^+[0-9]/ 行的开始是加号,紧跟着后面是一个数字
/:$/ 行的末尾是冒号
用户可以在任何特殊字符(但不是数字和圆括号)的前面加上反斜杠把它引起来。
例如
/end/./ end后面根有一个点号的所有字符串
单个反斜杠
//*/ 一个星号
//[5]]/ [5]
/and//or/ and/or
下面规则决定了正则表达式的运用
最大程度匹配:正则表达式通常是从该行的开头尽可能长地匹配字符串。例如输入
This (rug) is not what it once was (a ling time ago), is it?
表达式/Th.*is/匹配为:
This (rug) is not what it once was (a ling time ago), is
同时/(.*)/匹配为:
(rug) is not what it once was (a ling time ago)
不过/([^:)])*)/匹配为:
/rug/
空正则表达式,一些程序如vi和less,而不是grep中,空正则表达式代表用户使用最为频繁的正则表达式。如在vi中输入:s/mike/robert/,如果以后希望进行同样的替换则只需输入:s//robert/。
用户可以通过引用括号(/(和/))括起正则表达式。与括号里面的正则表达式相匹配的字符串可以连续使用。
字符串替换:vi和sed编辑器在替换命令中使用正则表达式来搜索字符串。用户可以在相应的替换字符串中使用"与"字号(&)和引用数字(/n)特殊字符来代表要匹配的字符串。
扩展正则表达式:+与1个或多个的前一个字符匹配。?匹配0个或者1个这样的字符。|匹配的结果:第一个表达式或者第二个表达式或者两个表达式的匹配结果。
更多推荐
所有评论(0)