使用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)/

本文作者:



相关阅读:
JavaScript入门之对象与JSON详解
jquery 图片Silhouette Fadeins渐显效果
学习样式表CSS参考-常用的CSS知识
AD RMS 权限策略模板创建和部署攻略
通过几个步骤有效关闭Oracle死锁进程
.Net中如何操作IIS
轻松打造Linux移动平台–UNetbootin
CSS的list-style解释
基于反向代理的Web缓存加速现代理服务器
JavaScript 匿名函数(anonymous function)与闭包(closure)
RedHat Linux操作系统下配置XDMCP的方法
PHP中的单例只在整个页面周期内唯一
DotNetNuke自定义窗体模块的数据结构(二)
php ftp文件上传函数(基础版)
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 悬在春天路口的爱情秋千 你是我心头的一颗朱砂 幽琳游荡记(3) 不该错过的风景作文1100字 建设“平安****”工作思路 心动梦圆时 HR面试陷阱问题解读 演讲技能培训 她的霓裳,令我感殇 2016个人工作总结报告 沉默的钢琴 弹跳飞人作文800字 所有女人听好了,男人有话要说!!! 县财政局关于进一步抓好行风建设的工作方案 麦子:《属于我们曾经的幸福烟花》 我为妈妈煮面条作文500字 圣诞节平安夜的祝福语,如雪花般飘来 建党90周年演讲稿题目 2013年劳动保障所半年工作总结 懂的越多、伤的越透、看的越透、痛的越深、小丑的悲哀、只有面具才会懂。 2014年最新电视台实习报告论文 恋爱男女应要学会细水长流 一瞬间独白,恍惚了谁 夜乱 2013最新母亲节祝福语 初中初二作文2400字:参观 “红色之旅”的体会 无论命运拐了多少弯,我们也要心存希望 渐失的阳光 心痛啊! 美术教育演讲稿 事业行政单位国有资产管理 放学后的校门口作文 药店实习自我鉴定范文 初中初二作文450字:挑着沉重的担子走 浅析西宁市中小学心理健康教育课程现状及对策 秋天不回来作文1500字 关于小兔子的作文100字 撕名牌 广州开收入证明_证明书 我与她之间的隔阂作文 乡镇麦收安全工作信息 我梦寐以求的军训生活 查理九世读后感作文250字 《三体》读后感 县汽车运输行业协会成立领导致辞 异火榜作文3000字 2015房屋委托出租合同 拒绝攀比 技术进口合同 爱你的劳拉

Copyright © 2016 phpStudy |