|
|
|
|
移动端

1.17 字符串、语言与正则表达式

《软件测试基础教程》第1章软件测试的基本知识,本章作为一个导引,其目的在于让读者熟悉与软件测试相关的基本概念,建立起全书的框架。在本书后续章节中将要详细阐述的问题,首先在这里被提了出来。读完这章之后,读者就能够在软件测试和软件质量方面提出一些有意义的问题。本节为大家介绍字符串、语言与正则表达式。

作者:王峰/郭长国/陈振华 等译来源:机械工业出版社|2011-09-16 21:46

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

1.17 字符串、语言与正则表达式

字符串在测试中具有重要作用。就像我们将要在3.2节中看到的那样,字符串是有穷状态机(FSM)的输入,因此也是程序的实现,这样,字符串也就是测试输入。若干个字符串集合起来,就形成了一个语言。例如,所有包含0和1的字符串的集合,就是一个二进制语言。在本节中,我们对字符串和语言进行简要概述。

一个符号的集合被称作字符集。用大写字母如X,Y来表示字符集。尽管字符集可以是无限的,但我们只关心有限字符集。例如,X={0,1}是包含2个符号(0和1)的字符集;另一个字符集

  1. Y={dog,cat,horse,lion} 

是包含4个符号(dog、cat、horse和lion)的字符集。

字符集X上的一个字符串,是字符集X中零个或多个符号的组合序列。例如,0110是字符集{0,1}上的一个字符串;dog cat dog dog lion是字符集

  1. {dog,cat,horse,lion} 

的一个字符串。用小写字母如p,q,r来表示字符串。一个字符串的长度,是该字符串包含的字符的总个数。对字符串s,用|s|表示其长度。这样,

  1. |1011|=4  
  2. |dog cat dog|=3 

长度为0的字符串,也被称作空字符串,用ε表示。

设s1,s2是字符集X上的两个字符串,用s1·s2表示连接(concatenation)运算。例如,给定字符集X={0,1}以及X上的两个字符串011和101,那么011·101=011101。很容易得知,|s1·s2|=|s1|+|s2|。还有,对任何字符串s,有s·ε=s,ε·s=s。

字符集X上的一个字符串集合L,称作一个语言。语言可以是有穷或无穷的。给定语言L1,L2,用L1·L2表示其连接运算:

 

下列集合是二进制字符集{0,1}上的有穷语言:

 :空集。

{ε}:只包含空字符串的语言。

{00,11,0101}:包含3个字符串的语言。

正则表达式是对字符串集合进行紧凑表示的常用手段。例如,正则表达式(01)*代表了一个字符串集合,包括空字符串,字符串01以及所有通过将01与其自身进行一次或多次连接运算得到的字符串。注意,正则表达式(01)*代表了一个无限的字符串集合。正则表达式的正式定义如下:

正则表达式

给定一个有限字符集X,下列是X上的正则表达式:

如果a∈X,则a是一个正则表达式,代表了集合{a}。

设r1,r2是字符集X上分别代表了集合L1,L2的两个正则表达式,那么,r1·r2是正则表达式,代表了集合L1·L2。

如果r是代表了集合L的正则表达式,那么r+是一个正则表达式,代表了通过一次或多次将L与L进行连接运算而得到的集合,记为L+。同样,r*称作r的Kleene闭包,也是一个正则表达式,代表了集合{ε}∪L+。

如果r1,r2是分别代表了集合L1、L2的两个正则表达式,那么,r1|r2也是正则表达式,代表了集合L1∪L2。

正则表达式在表示有限和无限测试序列时非常有用。例如,假如一个程序接收一个0和1的序列,并将0变为1、将1变为0,那么0*、(10)+、010|100是一些可能的测试输入集合。正如第3章描述的那样,正则表达式在定义FSM的所有可能的输入集合时也是非常有用的,FSM使机器从一个状态转到另一个状态。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Eclipse Web开发从入门到精通(实例版)

本书由浅入深、循序渐进地介绍了目前流行的基于Eclipse的优秀框架。全书共分14章,内容涵盖了Eclipse基础、ANT资源构造、数据库应用开发、W...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊