使用Perl常规表达式进行匹配

长期以来,Perl以其对常规表达式的固有支持,一直是非常流行的文本处理工具。在这篇入门性文章中,我们将带领你简单了解如何在你自己的程序中使用常规表达式,实现更加强大的文本搜索和替代功能。

我们首先了解最简单的常规表达式:匹配。如果在字符串中找到相匹配的模式,匹配操作就返回真值。因此下面的表达式:

$string =~ m/text/

只有在变量“$string”中的字符串包含子字符串“text”时才返回真值。这是最基本的常规表达式,它对每个字符进行逐字匹配。当然,这只是对常规表达式作用的一个尝试。以需要查找以“ext”结尾的四个字母的单词为例。为达到这个目的,我们使用一个特殊的字符“.”,常规表达式中的句号告诉Perl匹配其中的任何单独的字符。因此下面这个表达式:

$string =~ m/.ext/

将与单词“text”和“next”匹配。

不过,这个表达式并非完美,因为它与包含“ext”的更长单词的一部分相匹配,如“dextrous”和“flextime”。我们可以使用锚字符来限制匹配的位置。“^”字符匹配字符串的开头,因此:

$string =~ m/^.ext/

与“dextrous”匹配,但不与“context”匹配。

同样,“$”字符匹配字符串的结尾:

$string =~ m/.ext$/

与“context”匹配,但不与“dextrous”匹配。

如果你只希望匹配以“ext”结尾的四个字母的字符串,那么你可以组合使用上面的两个表达式,像这样:

$string =~ m/^.ext$/

现在,如果你需要匹配一组给定的字符,而不是句号位置的任何字符,那该怎么办呢?常规表达式通过使用方括号提供一个方法。以下面的表达式为例:

$string =~ m/^[tT]ext$/

这个表达式只与单词“text”和“Text”匹配。一对方括号将转换其中的任何单个字符。这个功能相当强大,例如:

$string =~ m/[aeiouAEIOU]/

如果$string变量中含有元音,则上面的例子返回真值。

如果括号中的第一个字符是“^”,这时它就不是一个锚字符,而是执行“非”操作,匹配不在括号内的任意字符,因此如果$string变量中只包含辅音或标点符号,可以对上面的例子进行调整,使它返回真值:

$string =~ m/[^aeiouAEIOU]/

方括号符号还可以指定字符的范围,让你不必列举一整串连续的数字或字母,例如,下面的例子匹配任何小写字母:

$string =~ m/[a-z]/

到现在为止,我们每次都是处理字符串中的一个字符,但许多情况下我们需要处理更加复杂的问题。我们使用“|”或分段操作达到这个目的。假设我们希望检查$string变量中是否含有“next”或“previous”,我们可以使用下面的表达式:

$string =~ m/next|previous/

如果我们希望在这个表达式中使用锚字符,那么我们需要将选项组合起来,就像在算术中使用圆括号那样。因此,如果我们希望只匹配字符串开头部分的“next”或“previous”,可以这样写表达式:

$string =~ m/^(next|previous)/

时间: 2025-01-31 02:06:30

使用Perl常规表达式进行匹配的相关文章

c-^(-{0,1}|+{0,1})[0-9]+(.{0,1}[0-9]+)$ 表达式不能匹配0?

问题描述 ^(-{0,1}|+{0,1})[0-9]+(.{0,1}[0-9]+)$ 表达式不能匹配0? bool floatyan(char *str1) { char *p; p= "^(-{0,1}|+{0,1})[0-9]+(.{0,1}[0-9]+)$"; CRegexpT reg( p,IGNORECASE ); MatchResult match_ret = reg.Match( str1) ; if (!(match_ret.IsMatched())) { cout&l

Unix下awk的几种常见用法

1.awk的常规表达式元字符 \换码序列 ^ 在字符串的开头开始匹配 $ 在字符串的结尾开始匹配 . 与任何单个字符串匹配 [ABC] 与[]内的任一字符匹配 [A-Ca-c] 与A-C及a-c范围内的字符匹配(按字母表顺序) [^ABC] 与除[]内的所有字符以外的任一字符匹配 Desk|Chair 与Desk和Chair中的任一个匹配 [ABC][DEF] 关联.与A.B.C中的任一字符匹配,且其后要跟D.E.F中的任一个字符. * 与A.B或C中任一个出现0次或多次的字符相匹配 + 与A.

linux命令终极系列(awk)

来源:http://www.cppblog.com/API/archive/2011/04/24/144895.html 参考:http://man.linuxde.net/awk 一.awk功能特点     awk是一个非常重要的命令或者认为是一种语言.因为他可以做数学运算,流程控制语句,流控制,还有样式装入的功能.反正是非常强大.awk是三位创建者编写的.把awk定义为:样式扫描处理语言.   awk吸收了C语言很多的特点,所以与C语言有点类拟. 二.awk的调用方式    awk提供了适应

原创Hadoop基础题库

原本想出至少50题hadoop, HDFS, MapReduce, Zookeeper相关的基础题,现在暂时不进行了,把已经出的20多道题都奉上. 暂时没有了出题的动力,可能觉得这东西出成题也没啥意义.总之权当巩固,各位权当消遣着瞧瞧. //Hadoop基础 Doug Cutting所创立的项目的名称都受到其家人的启发,以下项目不是由他创立的项目是 A. Hadoop B. Nutch C. Lucene D. Solr 答案:D 配置Hadoop时,JAVA_HOME包含在哪一个配置文件中 A

awk命令详解

来源:http://caoyanbao.iteye.com/blog/570868 来源:http://blog.sina.com.cn/s/blog_6ceed3280101dsir.html 什么是awk?  你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度.awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写.事实上,awk是

Perl中的正则表达式介绍

正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在 CGI 程序设计中就更能得心应手了   感谢AKA及作者. Perl 中的正则表达式正则表达式的三种形式 正则表达式中的常用模式 正则表达式的 8 大原则       正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在 CGI 程序

Perl中的正则表达式

正则表达式中的常用模式 正则表达式的 8 大原则 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在 CGI 程序设计中就更能得心应手了.下面我们列出一些正则表达式书写时的一些基本语法规则. 9.1 正则表达式的三种形式首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是: 匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m

解析posix与perl标准的正则表达式区别_php技巧

正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式.正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用 来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本 内容.许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的在正则表达式引擎.正则表达式这个概念最初是由 Unix中的工具软件(例如sed和g

关于Perl里面正则表达式规范_基础教程

1,定界符 =~ m/there/; =~ s/there/here/; 还有类型的定界符: =~ /there/ =~ m#there#; =~ s#there#here#; =~ m(there); =~ s(there)(here); =~ m{there}; =~ s{there}{here}; =~ m[there]; =~ s[there][here]; =~ m,there,; =~ s,there,here,; =~ m.there.; =~ s.there.here.; =~