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毫秒