免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3438 | 回复: 3

关于正则里面什么时候加QE [复制链接]

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
发表于 2014-06-05 17:52 |显示全部楼层
今天写正则,虽然已经解决,但是不知道什么时候用\Q$xx\E
麻烦大神帮我看看我这个为什么不能用\Q..\E


#!/usr/bin/perl -w
use v5.16;

my $rgx = '2014-06-02T(01|02|03|04)';


while(<DATA>{
        chomp;
        #if($_ =~ m/\Q$rgx\E/){
        if($_ =~ m/${rgx}/){
                say $_;
        }
}
__DATA__
D:\data\2014-06-02T00.36.20.562.log
D:\data\2014-06-02T01.36.20.562.log
D:\data\2014-06-02T02.36.20.562.log
D:\data\2014-06-02T03.36.20.562.log
D:\data\2014-06-02T04.36.20.562.log
D:\data\2014-06-02T05.36.20.562.log
D:\data\2014-06-02T06.36.20.562.log
D:\data\2014-06-02T07.36.20.562.log
D:\data\2014-06-02T08.36.20.562.log
D:\data\2014-06-02T09.36.20.562.log

这样可以过滤出来结果,为什么替换if($_ =~ m/\Q$rgx\E/){ 不行哇
还有就是当我正则写成:my $rgxx = 'D:\data\2014-06-02T(01|02|03|04)';的话怎么匹配哇,求点播

论坛徽章:
130
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2014-06-05 18:30 |显示全部楼层
回复 1# lockeyou

Do you know the \Q and \E function in RE?
   

$ perldoc perlre
    NAME
    perlre - Perl regular expressions
    ...
     \Q          quote (disable) pattern metacharacters till \E
     \E          end either case modification or quoted section, think vi

论坛徽章:
0
发表于 2014-06-05 18:32 |显示全部楼层
回复 1# lockeyou

何时使用QE, 首先要了解QE是干什么用的?
在用正则表达式时,在匹配某些特殊字符时,恰恰这些字符在正则表达式中有特殊含义,例如
  1. "$", ".", "()", "[]"
复制代码
等。若需要匹配这些特殊字符,我们就需要对其进行转义,一般是在前面加上“\"。
但是若使用一个变量来表示一个需要匹配的内容,就像这样

  1. my $regx= "3.14";
  2. my $var =~ m/$regx/ ;
复制代码
对于上面例子中, $regx 存在一个字符”." ,它在正则中有特殊含义,可以匹配单个的任何字符, 若不进行转义,侧表达的含义 与 仅仅匹配字符"3.14"是完全不同的。
那么对于变量$regx 中的特殊字符,如何进行转义呢? ,这个使用就是使用QE的时候了,  使用了QE , 就相当于对转义了特殊字符,使其按照预期的方式工作。

对于你提供的代码, 变量中$rgx中有很多的"()", "|",  这些字符,你其实想使用它的本义,就是正则本身的含义,而不是想转义成普通的字符,所有这个时候使用QE, 当然就不能按照预期工作了。



   

论坛徽章:
1
金牛座
日期:2014-03-21 18:22:34
发表于 2014-06-06 00:24 |显示全部楼层
感谢大牛,解释得很详细,受教了 回复 3# climby


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP