Skynet

---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks
一些特殊正则元字符说明:
 
1. *? 和 +? 和 {n,}?  懒惰匹配 
  
1.1 非懒惰                   ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(.*)"d/;'   #print ab2c12
   
1.2 懒惰                       ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(.*?)"d/;'   #print ab
 
2.  回溯引用和前后查找:
  
2.1 向前查找   (?=..)                   ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(.*?)(?=2)/;'  #print ab
  
2.2 向后查找 (?<=..)                 ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(?<=2)(.*)(?=2)/;' #print c1
  
2.3 负向-/后 查找  (?!..) (?<!..)   
   
#不能匹配 ..                               ↓
   
echo "ab2c121a" |perl -ne 'print $1 if /(?<!2)(c.*)/;'    #print 无
   
echo "ab2c121a" |perl -ne 'print $1 if /(?<!3)(c.*)/;'    #print c121a
  
2.4 条件 ?()  = if   ?()| = if else
   
# ?()  例如  <p> </p> 必须同时出现                ↓      ↓  
   
echo "<p>xx</p>"|perl -ne 'print $2  if /(<p>)?("w*)(?(1)<"/p>)/'   #print  xx
   
echo "<p>xx"|perl -ne 'print $2,""n" if /(<p>)?("w*)(?(1)<"/p>)/'    #print 空
   
echo "xx"|perl -ne 'print $2 if /(<p>)?("w*)(?(1)<"/p>)/'    #print xx
    # ?()|  例如 还是上面的, 
    # 当 有<p> 可以接</p> 也可以接 数字结尾                            ↓

echo 
"<p>xx1</p>"|perl -ne 'print $2  if /(<p>)?("w*)(?(1)<"/p>|"d)/'  #print xx1
echo 
"<p>xx1"|perl -ne 'print $2  if /(<p>)?("w*)(?(1)<"/p>|"d)/'    # print xx






整理 www.blogjava.net/Good-Game
posted on 2009-08-27 16:04 刘凯毅 阅读(1295) 评论(0)  编辑  收藏 所属分类: perl

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问