• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

教程:正则表达式

发布: 2007-7-04 20:03 | 作者: admin | 来源:  网友评论 | 查看: 24次 | 进入软件测试论坛讨论

领测软件测试网

Ruby中常会用到正则表达式。正则表达式是用来表达字符串的模式(pattern)的。也可以这么理解:我们使用正则表达式来表示某种搜索规则,然后使用该正则表达式来完成字符串的搜索工作。举个例子,假定有这样的搜索规则:“字符串以’FOO’开始,以’R’结束”,那么就可以使用以下正则表达式来表示该规则。

/^FOO.*R$/

Ruby用//将正则表达式括起来。^表示开头,$表示结尾,.*表示0个以上的任意字符。

现在就讲讲正则表达式的规则的写法。正则表达式中有很多上述的具有特别意义的字符。首先是下列字符。

[ ] 范围描述符。[a-z]表示从a到z之间的任意一个。 \w 英文字母和数字。即[0-9 A-Z a-z]。 \W 非英文字母和数字 \s 空字符,即[\t\n\r\f]。 \S 非空字符。 \d 数字,即[0-9]。 \D 非数字。 \b 词边界字符(在范围描述符外部时) \B 非词边界字符 \b 退格符(0x08)(在范围描述符内部时) * 前面元素出现0次以上 + 前面元素出现1次以上 {m,n} 前面元素最少出现m次,最多出现n次 ? 前面元素出现0次或1次 | 选择 ( ) 群组 其他字符 该字符本身

例如,“^f[a-z]+”表示“第一个字符是f,后面是若干个从a到z之间的字符”,可以是“fobar”或“fool”等等。这种表达法就是正则表达式(regular expression)。在搜索字符串时正则表达式非常有用,因此在UNIX的世界里,正则表达式得到了广泛的应用。grep程序就是个代表。许多人是不是经常会用到它呢?

为了学会使用正则表达式,先来试试下面这个程序。请用文件名regx.rb将程序保存下来以后再运行它。

st = "\033[7m" en = "\033[m" while TRUE print "str> " STDOUT.flush str = gets break if not str str.chop! print "pat> " STDOUT.flush re = gets break if not re re.chop! str.gsub! /#{re}/, "#{st}\\&#{en}" print str, "\n" end print "\n"

该程序会在第一次输入的字符串中按照第二次输入的正则表达式的要求寻找合适的字符串,并将其以反色显示出来。下面是运行结果。

str> foobar pat> ^fo+ foobar ^^^

# 实际上foo的部分被反色显示了。

再试一试。

str> abc012dbcd555 pat> \\d abc012dbcd555 ~~~ ~~~

从上例可以看出,该程序可以检测出多处符合条件的字符串。

str> foozboozer pat> f.*z foozboozer ~~~~~~~~

在这个例子中,正则表达式“f.*z”并非只是对应到fooz,而是一直对应到foozbooz这里。这是因为,正则表达式总是在符合条件的结果中选择较长的一个。

正则表达式甚至可以写出让人一眼看不透的模式,这可能会像谜语一样有趣。但若过分凝炼的话,以后就很难搞懂当初的想法了。

str> Wed Feb 7 08:58:04 JST 1996 pat> [0-9]+:[0-9]+(:[0-9]+)? Wed Feb 7 08:58:04 JST 1996 ~~~~~~~~

Ruby用’/’将正则表达式括起来。另外还有一些方法会自动将字符串变为正则表达式。

% ruby -le 'print "abcdef" =~ /d/' 3 % ruby -le 'print "aaaaaa" =~ /d/' nil

‘=~’是使用正则表达式进行匹配的操作符,它返回匹配成功时的位置。

到底哪些方法可以处理正则表达式呢?关于这个问题,请查阅参考手册。

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网