Chinaunix首页 | 论坛 | 博客
  • 博客访问: 858731
  • 博文数量: 253
  • 博客积分: 6891
  • 博客等级: 准将
  • 技术积分: 2502
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-03 11:01
文章分类

全部博文(253)

文章存档

2016年(4)

2013年(3)

2012年(32)

2011年(184)

2010年(30)

分类: Python/Ruby

2012-03-29 10:36:14

语法看起来像这样:

    (? )

这里,代表扩展名,是表达式使用的文本.
?!  只在后面没有《regexp》情况下匹配。
?:  组合但非反向引用创建括号。即匹配但不把内容存入$number中。
?=  匹配下一组文本,但不“吃掉”它来进一步匹配。


点击(此处)折叠或打开

  1. $a='dabde';
  2. $a=~/ab(?:d)/;
  3. print $&, '....', $1;

  4. abd....

点击(此处)折叠或打开

  1. "that is a bag" =~ /that(?! is)/;
  2. print "……$&\n";

  3. "these are my bag" =~ /these\s+(?!is)/;
  4. print "……$&\n";
  5. ……
  6. ……these
。例如:(?:…)通过除去不必要的反向引用而使正则表达式更高效。如果输入:

    $line = ~ m " (?:int | unsigned int | char )\s*(\w+)";

以得到变量名,而可能不希望保存变量的类型,因而用(?:)。表达式匹配给定类型,后跟空格,后跟变量名(\w+)。但是把变量名保存在$1中而不是$2中,(?:)被忽略。这样可节省时间和内存,尤其是在大型模式匹配中。


点击(此处)折叠或打开

  1. $a="BLOCK1 BLOCK2 BLOCK3 ";
  2. while ($a =~ m "BLOCK\d(.*?)(?=BLOCK\d|$)"g)

  3. {

  4.  print " $1 \n";

  5. }


  6. while ($a =~ m "BLOCK\d(.*?)(BLOCK\d|$)"g){
  7.     print "...$1\n";
  8. }

  9.   <data>
  10.   <data2>
  11.   <data3>
  12. ... <data>
  13. ... <data3>











阅读(1707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~