Perl正则表达式语法

所谓Perl正则表达式,就是一串特别设计过的字符串,可以按照你的意图用匹配操作寻找你要求的目标。我这里不是Perl手册,也不是教科书,所以我从例子开始,具体的完整说明还请查手册。

1.1转义符号\

前面说过缺省情况下Perl正则表达式要用/包起来,那么现在要寻找一个字符串里面有没有/怎么办?不是有歧义了么那个表达式。换你设计Perl语言该咋办?玩过C语言的人看到这里一定在嘿嘿笑,因为在C里面简单,要写/必须写成\/,要写\必须写成\。说Perl在语法上是C的表弟是很不错的,Perl规定的转义符号也是.常用的特殊符号有回车\n,跳格\t,斜杠\和\/,引号\’和\”,方括号,圆括号,美元号$,上尖号\^,星号*,点号.,问号\?,加号+。我都是随手写的,建议拿不定主意的话,非51个字母的符号都去查查手册吧。
举例:查一个字符串里有没有美元号;

my $szValue='$6580.90';
$szValue =~ /\$/;

1.2 或操作

Perl的Perl正则表达式缺省是区别大小写的。什么,前面早该告诉你?真可怜,又一个从Windows世界来的小孩,就和我想当然以为在美国商店应该在复活节大做生意创造GDP一样,可是人家不开门。为了串即匹配”Apple”又匹配”apple”,你可以这样:

$szProductType =~ /[Aa]pple/;

在方括号里的字母是”或”的关系,击中其中一个就可以了。在一个Perl正则表达式中可以用任意多个方括号,但是不要嵌套。常常能见到的一种表达式

[0-9] :
表示0到9这十个字母,也可以用\d来代替。\D则表示非数字字符。
[a-zA-Z]
表示51个字母。

顺便在这里把反义也讲了吧,[^0-9]代表非数字的其它字符,[^a]代表非a的其它字符。^在这里是反义的意思,但是请注意^还能做头锚用,后面会讲到。

1.3 尾缀

有人摇头不喜欢上面的解决方案,我要求真正匹配一个不区分大小写的”Apple”应该怎么办?请这样

$szProductType =~ /apple/i;

放在第二个/符号后面的尾缀i取消了一切大小写检查。

另外再说两个有用的尾缀吧,第一个是g(全局匹配),如果有字符串

my $string="Applejuice,appleCider,applejeans,applepie,appleplate,apPLebag,…";

有尾缀/g可以进行全局搜索,就可以找出所有带apple的词汇;例如:

while($string=~/(apple.*?),/ig)
{print "$1\n";#打印匹配的内容
}

而用表达式$string=~/apple/i;只会遇到第一个apple就结束。

注意尾缀是可以叠加使用的。上面Perl正则表达式中的圆括号、点号和问号和$1,下面马上会讲到。

另一个有用的的尾缀是s。s会强迫点号(.)匹配换行符号(\n),这对于多行匹配是必须的。不要小看这个技巧,我花了几个小时才找到的哦。

1.4 捕获匹配的字符串

my $szValue ='$1999.99';
if($szValue =~ /\$([0-9]+)\.([0-9]+)/)
{print "$1dollors $1cents\n";
}

上面表达式里的加号表示匹配一到多个前面的符号,在这里符号是数字。用圆括号括住的内容,将会依次(从左到右)出现在”$1,$1,$3……”里面。另外,顺便说,整个Perl正则表达式匹配的结果是放在$&里面,上面这个表达式演算下来$&的值还是”$1999.99”。

另外,还有\1,\1形式的反向引用,使得表达式里面可以用捕获的字符串。举例:表达式”(\w)\1{4,}”在匹配”aabbbbabcdefgccccc111111111999999999”时,匹配结果是:成功;匹配到的内容是”ccccc”。再次匹配下一个时,将得到999999999(要用while和/g来配合)。

1.5 任意符号.,和次数符号以及+*

Perl正则表达式里点号是通配任意字母的,例如:

$string=~/w.*/i;

就匹配$string里从第一个w字母开始一直到字符串结束。*表示匹配任意字母0到任意多次。号也常被换成+号,表示匹配1到任意多次。如果即没有也没有+,那么就是匹配1次。如果要自己定义匹配的次数或者次数上下限怎么办?用{}符号:

$string=~/\d{5,15}/;
上面的式子匹配5到15位数字

$string=~/\d{10}/
上面式子匹配10位数字。

附带说两个常用的符号,\S和\s。前者是”非空白”,后者是”空白”,具体来说包括回车、空格、跳格、响铃。

1.6 贪婪的+和,止贪剂?*

Perl正则表达式是贪婪的(确切地说,次数符号+和*是贪婪的),可以帮助你做一些事情。

my $string ='$190098';
$string =~ /\$(\d+)/;

由于+号的贪婪性,$1会得到值”190098”,而不是遇到第一个数字1就完成匹配。

但有的时候你会不希望他贪婪,希望见好就收。还是我前面用过的一个例子
my $string=”Applejuice,appleCider,applejeans,applepie,appleplate,apPLebag,…”;

如果用$string=~/(apple.*),/i;由于*的贪婪性,它会一直匹配到最后一个逗号才停下来,这不是我们想要的结果。
解决办法是用止贪符号?紧跟在或者+后面,$string=~/(apple.*?),/i;问号会约束遇到第一个逗号就停下来。

1.7 头锚^和尾锚$

有时候你希望从一个字符串的开始或者结尾匹配。

my $string ='Aquickbrownfoxjumpsoveralazysnake';

$string =~/^A/; #匹配第一个字母是否为A
$string =~/snake$/; #匹配最后几个字母是否为snake

还有一个\b,匹配的是单词边界,意思是空白或者开头或者结尾。

转载于http://blog.csdn.net/fangwei1235/article/details/8570618

perl 正则表达式使用技巧相关推荐

  1. perl 正则表达式 引擎_Perl 5引擎概述

    perl 正则表达式 引擎 正如我在" 我的DeLorean运行Perl "中所述,切换到Perl极大地提高了我的开发速度和可能性. 在这里,我将更深入地研究Perl 5的设计,以 ...

  2. Perl正则表达式讲解

    转载:http://blog.sina.com.cn/s/blog_607254630101cvx3.html 9.3.1 原则1 正则表达式有三种形式:匹配.替换和转换. 在表 9-1 中列有三种正 ...

  3. perl正则表达式-1

    .代表任何一个单字符,不匹配换行符. *是量词,表示前面内容出现0到多次. +也是量词,表示前面内容出现1到多次. 字符集简写     \d表示一个数字     \w表示一个单词字符()数字,字母,下 ...

  4. perl正则表达式匹配中文

    perl正则表达式匹配中文:/[^u4E00-u9FA5]/ js中正则表达式匹配中文:match(/[\u4E00-\u9FA5]/)

  5. Perl 正则表达式

    Perl 正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. Pe ...

  6. Perl——正则表达式

    Perl正则表达式 文章目录 Perl正则表达式 一.正则表达式的应用 二.正则表达式之元字符 2.1 转义 2.2 特殊匹配 2.3 匹配次数 2.4 各种括号 ( ),[ ],{ } 三.正则表达 ...

  7. Perl正则表达式(2) - 用正则表达式进行匹配

    Perl正则表达式 2. 用正则表达式进行匹配 2.1 用 m// 进行匹配 到目前为止,我们都是讲正则表达式的内容写在一对斜线内,如/fred/.但其实这是 m// 的简写,其中m代表match,和 ...

  8. Perl正则表达式(1) - 正则表达式基础知识

    Perl正则表达式 1. 基础知识 Perl中正则表达式(regular expression)默认匹配 $_ 中的字符串,匹配成功就返回真,否则返回假: Perl匹配正则表达式时,可以使用变量内插, ...

  9. 在 UltraEdit 和 UEStudio 中开始使用 Perl 正则表达式

    作为 UltraEdit/UEStudio 查找/替换功能中最强大的组件之一,Perl 正则表达式使您能够在一次替换中重新格式化大量非均匀数据,从而为您节省几分钟甚至几小时的手动文本编辑时间! 要搜索 ...

最新文章

  1. 数据挖掘如何分箱以及如何对每个箱子中的数据进行平滑处理
  2. mysql经纬度转距离_Mysql 拿指定经纬度与数据库多条经纬度进行距离计算 (转)
  3. 使用阿里云OSS上传文件
  4. 作为前端开发兼任产品专员是一种咋样的体验
  5. ASP.NET MVC 框架路线图更新 【转】
  6. No module named 'pandads'
  7. 【吾日三省吾身】2015.6.03-涅槃行动第十六天
  8. ssh ip登录缓慢问题解决
  9. pat 乙级 1030 完美数列(C++)
  10. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(5)
  11. oracle rds 运维服务_从运维的角度分析使用阿里云数据库RDS的必要性–你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库...
  12. json在线解析工具大集合
  13. Spring Boot笔记-JPA分页(后端分页)
  14. POJ3737 UmBasketella
  15. wifi 中间人攻击_揭秘3·15晚会“Wi-Fi中间人攻击”的操作原理
  16. 验证DG最大性能模式下使用ARCH/LGWR及STANDBY LOG的不同情况
  17. paip.编程语言到底有没有优劣之分优秀之分
  18. flash用的什么语言
  19. 中科大计算机考研录取分数线_2017计算机专业学校考研难度排行榜,计算机考研难度排名...
  20. 在LINUX-DEBIAN系统下挂载新硬盘的方法

热门文章

  1. 做一名文艺青年-3D游戏引擎从2D开始
  2. js反转一个字符串的排列顺序
  3. 关于VR产品的前世今生,看这一篇文章就够了
  4. 2022美亚杯团体赛
  5. 情人节还没过完,谁说你就只能吃狗粮呢!
  6. nginx参数fastcgi
  7. linux入门---云服务器购买和登陆
  8. 【总线】【PCI】【PCIe】【转】配置空间
  9. TQ4418开发平台在排队机解决方案的应用
  10. 7.SHELL脚本编程练习