在学习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个这样的字符。|匹配的结果:第一个表达式或者第二个表达式或者两个表达式的匹配结果。

 

 

 

Logo

更多推荐