Linux 版 (精华区)

发信人: tcpip (偶的昵称改了), 信区: Linux
标  题: 我所知道的Perl--正则表达式
发信站: 紫 丁 香 (Mon Feb 28 16:12:08 2000), 转信

****************************************************************************
本文不是perl的完整手册,这只是我的一点收集和整理.不能说是完整意义上的创作,听
前辈说写东西有两种境界,一种是写,一种是编.我是属于后者, 东拼西凑再加上自己使
用perl以来的体会,于是有了此文. 希望通过这个东西能让大家对perl有比较清晰的感
觉,更希望工大喜欢perl的人多起来.
       本文可以随意转载(删改后请给我一份),但只限于网络媒体!
****************************************************************************

第三章  正则表达式(也叫常规表达式)

    正则表达式在Perl中的运用,可以说给Perl增添了无穷的魅力.短短的一点代码竟然
可以完成如此众多的功能,虽然看起来比较像天书.正则表达式是Perl作为数据过滤器的
一个重要标志.熟悉本部分内容的朋友,请直接跳过.    
    Perl正则表达式是一般意义上的正则表达式的一个超集.这一章不会涉及正则表达式
的全部内容,只罗列出最基本的用法,其他的大都是这几种情况的叠加或者一般不太常用.
关于Perl正则表达式的详细说明,请参考 man perlre.

3.1 正则表达式可以做什么
    .匹配任意类型的字符和二进制数据
    .处理任意长度的数据
    .包含长达65536字节的表达式
    .保存模式匹配当中的内部变量,并可以访问
    .匹配字母类别
    .否定查询
    .进行贪婪匹配

3.2.1 基本形式
    有3种:匹配,替换,转换
           |    |     |
         m// s///  tr///
    变量名=~/正则表达式/       察看是否存在指定模式
    变量名!~/正则表达式/       察看是否不存在指定模式
其中'/'为分割符.比如,要在一个字符序列当中验证是否包含'abc',可以这样写:
  $string="asdfabce";
  if( $string=~m/abc/ )
  {
    #do what u want
  };
要寻找开头为abc的,则这样写:
  if( $string=~m/^abc/){};
要把abc换成abcde,则这样写(而且不用担心替换以后后面的字符串是否被覆盖):     
  $string=~s/abc/abcde/; #now $string is 'asdfabcdee',not 'asdfabcde'
要把abc换成123,则这样写:
  $string=~tr/a-c/1-3/;  
上面这些都是匹配一次就结束的,要对整个行匹配,在后面加上'g'即可.

3.2.2 需要注意的几个地方,小技巧

  1.正则表达式仅对标量起作用.切记!
  2.第一个匹配后的结果保存在$1,第二个保存在$2中,后面类推
  3.关于x,i,e,和o,含义:
    x-忽略空格和注释
    s-字符串单行方式
    m-字符串多行方式
    i-忽略大小写
    o-编译正则表达式一次
    用法类次下面:
    $line=~m/../../x;
  4.使用'/'来进行字符转移,比如要表达一个'/',则需要写'//'
  5.正则表达式高效,但很容易生成的东西晦涩难懂,我的建议是:宁可多分
    几步完成,也不要一次把匹配规则全写出来 
                                
3.3 常用字符列表
   这里列出来正则表达式常用的一些字符,供查询之用.
   ================================================
   字符                 描述   
   ------------------------------------------------
   .                    匹配除了新行以外的任何字符
   (...)                聚合一系列元素
   +                    一次或多次匹配
   *                    零次或者多次匹配
   [...]                在封闭集中匹配
   [^...]               在求补集中匹配
   (..|..|..)           与可选之一匹配
   ^                    与开始元素匹配
   $                    在末尾匹配
   {n.m}                进行m~n次匹配
   {n}                  进行n次匹配
   {n,}                 至少进行n次匹配
   \n                   换行
   \t                   tab
   \b                   标示后面以字为单位
   \B                   标示不以字为单位
   \d                   匹配一个数字
   \D                   匹配非数字
   \s                   空白符
   \S                   非空白符
   \w                   字母和数字
   \W                   非字母和数字
   =================================================
   
   
--
"这一千多年没写诗了?"
"写了, 不过只写了两句."
"千年得两句, 一定是万古丽句了. 念来听听."
"好吧, 我现丑了" 太白星清了清嗓子, 浑厚的男中音在天庭响起:
大海啊, 都是水;
骏马啊, 四条腿;

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: tcpip.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.084毫秒