您的位置:首页 > 其它

学习正则表达式【一】

2016-07-18 12:08 218 查看
《精通正则表达式》Jeffery Friedl 学习总结

第一章 正则表达式入门

  正则表达式赋予使用者描述和分析文本的能力。配合上特定工具提供的额外支持,正则表达式能够添加、删除、分离、叠加、插入和修整各种类型的文本和数据。宿主语言(例如Perl、Java以及VB.NET)提供了外围的处理支持,但是真正的能力来自正则表达式。

1 检索文本文件:egrep

   在指定了正则表达式和需要检索的文件之后,egrep会尝试用正则表达式来匹配每个文件的每一行,并显示能够匹配的行。
  egrep能够理解文件中的字节和行,但它完全不理解英语(或者其他任何语言)的单词、句子、段落、或者是其他复杂概念。最好养成按照字符来理解正则表达式的习惯。例如“^cat”匹配的是以c作为一行的第一个字符,紧接一个a,紧接一个t的文本,而非匹配以cat开头的行。

2 字符组

  “[…]”,正则表达式结构体。它容许使用者列出在某处希望匹配的字符,通常被成为字符组。正则表达式“[ea]”能匹配e或者a。所以“gr[ea]y”的意思是:先找到g,跟着一个是r,然后是一个e或者a,最后是一个y。
  在字符组内部,字符组元字符“-”(连字符)表示一个范围:“<H[1-6]>”与“<H[123456]>”是完全一样的。多重范围也是容许的,例如“[01234abcd]”可以写作“[0-4a-d]”。请注意,只有在字符组内部,连字符才是元字符——否则它就只能匹配普通的连字符号。
  “[^1-6]”匹配除了1到6以外的任何字符。这个字符中开头的“^”表示“排除(negate)”。注意,一个字符组,即使是排除型字符组,也需要匹配一个字符。

3 忽略大小写

  egrep的命令行参数“-i”表示进行忽略大小写的匹配。把“-i”写在正则表达式之前:
“% egrep -i '^{From|Subject|Date}:' mailbox”,结果除了包含前述内容外,还包含这一行“SUBJECT:MAKE MONEY FAST”。

4 单词分界符

  请注意,“<”和“>”本身并不是元字符——只有当它们与斜线结合起来的时候,整个序列才具有特殊意义。

5 其他量词

  问号、加号和星号这3个元字符,统称为量词,因为它们限定了所作用元素的匹配次数。量词作用的对象是它们之前紧邻的子表达式。所以“mis+pell”中“+”作用的是“s”,而非“mis”或者“is”。

6 括号及反向引用

  在许多流派的正则表达式中,括号能“记住”它们包含的子表达式匹配的文本。反向引用是正则表达式的特性之一,它容许我们匹配与表达式先前部分匹配的同样的文本。在支持反向引用的工具软件中,括号能够记忆
其中的子表达式匹配的文本,不论这些文本是什么,元字符序列“\1”都能记住它们。

7 HTML URL

  “[-a-z0-9_.]+”,注意,连字符必须放在字符组的开头,保证它是一个普通字符,而不是用来表示范围。

  在深入了解如何调校正则表达式之后,读者会明白,要想在复杂性和完整性之间求得平衡,一个重要的因素是了解待搜索的文本。一个正则表达式的效率优于其他表达式的原因在于,在复杂性、效率和匹配准确性间进行取舍权衡。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: