正则表达式实例(1)

来源:互联网 发布:类似金十数据的网站 编辑:程序博客网 时间:2024/05/21 09:24

perl源文件

regex.pl:
#! /usr/bin/perl -w
$argv="-o=eng this is good -op=usr";
$argv=~ /^-(o|op)=(\S*)/;
print "first:$1 second:$2\n";
执行结果:
first:o second:eng

1.()
()的作用是什么? 可以将括号内的字符保存在标量$1,$2,...中,便于后续引用,在这里$1="o",$2="eng"。
2. \S
为何用\S*而不是.*? 因为.可以匹配任意字符,而\S是匹配非空白字符,如果使用了.*,那么输出结果中: $2="eng this is good -op=usr",将会一直匹配到末尾。
3. ^
^的作用是什么?^用于从行首开始匹配,我们看到-(o|op)=(\S*)实际上可以匹配到两个字串,"-o=eng"和"-op=usr",一个在前,一个在后,使用^就可以匹配到前一个字串。
4. $
如何匹配到后一个字串"-op=usr"呢? 这就要用到$了,$表示从行尾开始匹配,我们将匹配语句改写为如下:
$argv=~ /-(o|op)=(\S*)$/;
执行结果:
first:op second:usr
5. /i
如果想忽略大小写,怎么做呢?那就要用到i了,我们将字符串和匹配语句都修改如下:
$argv="-OP=eng this is good -op=usr"; //将开头的OP改为大写
$argv=~ /^-(o|op)=(\S*)/i;   //后面添加/i
执行结果:
first:OP second:eng
虽然(o|op)是小写,但是在末尾添加了/i,所以大写的"OP"同样可以匹配到。
6.\
如果源字符串内的字符有特殊字符,比如源字符如下:
$argv=".OP=eng this is good .op=usr"; //把"-"替换成了"."
那么为了匹配"."在匹配语句中就要用到"\."来做转义,否则"."就变成了匹配任意字符的意思了。
$argv=~ /^\.(o|op)=(\S*)/i;
执行结果:
first:OP second:eng
7.(?:)
从1.中我们知道()可以保留匹配结果,如果我们不想保留结果呢?
$argv=".OP=eng this is good .op=usr";
$argv=~ /^\.(?:o|op)=(\S*)/i; //将(o|op)改为(?:o|op),只做匹配,不保存结果
执行结果:
first:eng second:
可以看到,$1="eng",而$2为空了。
8. []
[]可以用来精确查找,我们将源输入字符串修改如下:
$argv=".OP=eng,this,is,good,op=usr"; //在词与词之间用,连接
$argv=~ /^\.(o|op)=(.*,)/i;   // 使用.*,来匹配
print "\$1:$1 \$2:$2\n";  
执行结果:
$1:OP $2:eng,this,is,good, 
说明".*,"来做最大限度的匹配,匹配到最后一个","。
为了能够只匹配到"eng,",使用[],将匹配语句修改如下:
$argv=~ /^\.(o|op)=([^,]*),/i; // [^,]表示非逗号字符
执行结果:
$1:OP $2:eng

9.(?=)
我们将源输入字符串修改如下:
$argv=".OP=eng,this, windows2000 is,good,op=usr";
如果想匹配到"windows"字串,它的后缀是"2000",如何做呢?
匹配语句如下:
$argv=~ /(\b\w+(?=2000\b))/i;
\b:表示单词与空格的边界
\w:表示包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”
(?=2000):表示匹配后缀为"2000"的前面的字符串,而且不保存结果
\b\w+(?=2000\b):表示匹配前后有空格的后缀是"2000"的并且在"2000"之前的字符串,即"windows"
(\b\w+(?=2000\b)):为了把结果保存下来,外边再加一个括号,这是使用1.中介绍的规则。
打印结果:
$1:windows
如果将(?=)改为7.中介绍的(?:),那么匹配语句变成:
$argv=~ /(\b\w+(?:2000\b))/i;
打印结果变成:
$1:windows2000
如果将(?=)改为1.中介绍的(),那么匹配语句变成:
$argv=~ /(\b\w+(2000\b))/i;
打印结果变成:
$1:windows2000 $2:2000
因此,()、(?=)、(?:) 是完全不一样的结果。

 

 

 

 

原创粉丝点击