Chinaunix首页 | 论坛 | 博客
  • 博客访问: 326288
  • 博文数量: 88
  • 博客积分: 2051
  • 博客等级: 大尉
  • 技术积分: 950
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 23:59
文章分类

全部博文(88)

文章存档

2012年(3)

2011年(2)

2010年(9)

2009年(14)

2008年(60)

我的朋友

分类:

2008-12-13 00:09:09

if(/.../) 将/ /之间的表达式匹配默认变量$_
.表示元字符,可以匹配任意字符;除了换行符,因为正则表达式一般用来处理一行的内容??
*表示前面的字符出现任意次;+表示至少一次;?表示最多一次
(fred)+表示fred出现至少一次
|表示匹配|两边的任意一个字串都可以,/fred( |\t)bar/匹配fred和bar之间有空格或者\t
[\000-\177]匹配任意7bit ascii码;[^n\-z]匹配n - z之外的任意字符;[...]只对一个字符进行匹配
名字叫做字符类。
 
字符类的简写: \d表示[0-9],\w表示[A-Za-z0-9_],w----word这就是为什么那么多网站要求名字只能包含这些字符了!
空白\s表示[\f\t\n\r ],即匹配格式符,制表符,换行符,回车或者空格。
[^\d] \D; [^\w] \W; [^s] \S
 
[\d\D]匹配任意字符(包括换行符);[^\d\D]--啥都不是
 

open($fh,") || die $!; #以只读打开一个文件

while($_=<$fh>){  //从$fh中读出1行到默认变量
  if(/index/){   //能匹配/index/就输出
    print "$_";
  }
} //实现了grep功能

 
/.../其实是m/.../的简写,这一对儿符号可以用其他符号替换,如[],{}.
在表达式后面加上一些特殊的tag可以指定一些特性,/i表示大小写无关,/s告诉正则表达式解析器,.元字符可以匹配\n;
 
/x告诉解析器,不要解析表达式里面的空格,空格或者制表符是为了方便人阅读用的,这时候请你用/s来表示空白的匹配。甚至可以多行写一个正则表达式,为每一行的行为加上注释。
/-?   #注释
 \d+
 \.?
 \d*
 /x   #告诉解析器忽略换行符、空白,和注释
 
if(m{
  foo
  .*
  bar
  }isx){
  do something;
}
 
Anchors
 
/^something/ 匹配以something开头的行,/something$/匹配以something结束的行(包括\n)吗?
 
注意与字符类中^使用的区别。[^\d]
 
\b表示对单个行进行锚定匹配,/\bsomething\b/全字匹配单词,something。其实\b表示以something开头的词,放到后面就表示以something结束的词。
 
\b表示在词界的地方匹配,\B表示在非词界的地方匹配。/\bbar\B/可以匹配barxy,但不能匹配bar
 
if($var=~/\bfoo/){
$var中含有以foo开头的词。
}
 
解析器为表达式中每个()对分配一块内存来保存其匹配的字串,可以通过$1 $2等来访问。
 
perl内置的变量,名字太古怪了!
$_ 默认使用的变量
@_ 默认的数组
$! 默认的错误原因,类似linux中的error
$& $` $' 太古怪的变量
if("hello there, somebody"=~/\s(\w+),/){
  此时$1是there,$`是“hello”,$&是“ there,” $'是“ somebody”
}
 
$&表示匹配上的字串,$`表示这个字串之前找出的字串,$'表示这个字串之后还没搜索的字串。
 
最开始的*,+,?表示量词,用来表示关键字出现的次数。更详细的做法是通过{a,b}来表示出现[a,b]次。/a{5,10}/出现5次以上a,如果高于10次,结果只返回10次的结果。{a}表示确切匹配a次。
 
Perl表达式的优先级
 
1.括号
2.量词。* + ? {a,b}
3.锚定符号和字符序列
4.|
 
 
阅读(1557) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~