正则表达式

正则表达式基础python

实验介绍正则表达式

虽然咱们这一节的标题是正则表达式,但实际这一节实验只是介绍grep,sed,awk这三个命令,而正则表达式做为这三个命令的一种使用方式(命令输出中能够包含正则表达式)。正则表达式自己的内容不少,要把它说明清楚须要单独一门课程来实现,不过咱们这一节中涉及到的相关内容一般也可以知足不少状况下的需求了。编程

想要更深刻地学习使用正则表达式,在这里 正则表达式基础markdown

1、正则表达式编程语言

什么是正则表达式呢?编辑器

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在不少文本编辑器里,正则表达式一般被用来检索、替换那些符合某个模式的文本。函数

许多程序设计语言都支持利用正则表达式进行字符串操做。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 UNIX 中的工具软件(例如sed和grep)普及开的。正则表达式一般缩写成“regex”,单数有 regexp、regex,复数有 regexps、regexes、regexen。工具

简单的说形式和功能上正则表达式和咱们前面讲的通配符很像,不过它们之间又有很大差异,特别在于一些特殊的匹配字符的含义上,但愿初学者注意不要将二者弄混淆。性能

1. 举例学习

 

假设咱们有这样一个文本文件,包含"shiyanlou",和"shilouyan"这两个字符串,一样一个表达式:

shi*

若是这做为一个正则表达式,它将只能匹配 shi,而若是不是做为正则表达式*做为一个通配符,则将同时匹配这两个字符串。这是为何呢?由于在正则表达式中*表示匹配前面的子表达式(这里就是它前面一个字符)零次或屡次,好比它能够匹配"sh","shii","shish","shiishi"等等,而做为通配符表示匹配通配符后面任意多个任意字符,因此它能够匹配"shiyanlou",和"shilouyan"两个字符。

体验完了,下面就来开始正式学习正则表达式吧。

2.基本语法:

一个正则表达式一般被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。

选择

|竖直分隔符表示选择,例如"boy|girl"能够匹配"boy"或者"girl"

数量限定

数量限定除了咱们举例用的*,还有+加号,?问号,.点号,若是在一个模式中不加数量限定符则表示出现一次且仅出现一次:

  • +表示前面的字符必须出现至少一次(1次或屡次),例如,"goo+gle",能够匹配"gooogle","goooogle"等;
  • ?表示前面的字符最多出现一次(0次或1次),例如,"colou?r",能够匹配"color"或者"colour";
  • *星号表明前面的字符能够不出现,也能够出现一次或者屡次(0次、或1次、或屡次),例如,“0*42”能够匹配4二、04二、004二、00042等。

范围和优先级

()圆括号能够用来定义模式字符串的范围和优先级,这能够简单的理解为是否将括号内的模式串做为一个总体。例如,"gr(a|e)y"等价于"gray|grey",(这里体现了优先级,竖直分隔符用于选择a或者e而不是gra和ey),"(grand)?father"匹配father和grandfather(这里体验了范围,?将圆括号内容做为一个总体匹配)。

语法(部分)

正则表达式有多种不一样的风格,下面列举一些经常使用的做为 PCRE 子集的适用于perl和python编程语言及grep或egrep的正则表达式匹配规则:(因为markdown表格解析的问题,下面的竖直分隔符用全角字符代替,实际使用时请换回半角字符)

PCRE(Perl Compatible Regular Expressions中文含义:perl语言兼容正则表达式)是一个用 C 语言编写的正则表达式函数库,由菲利普.海泽(Philip Hazel)编写。PCRE是一个轻量级的函数库,比Boost 之类的正则表达式库小得多。PCRE 十分易用,同时功能也很强大,性能超过了 POSIX 正则表达式库和一些经典的正则表达式库。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息