首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与特殊字符匹配的Perl正则表达式

与特殊字符匹配的Perl正则表达式
EN

Stack Overflow用户
提问于 2015-03-24 14:12:06
回答 2查看 1.4K关注 0票数 2

在下面的代码中,我正在检查数组excluded.It中的一个特定变量位置,它可以很好地处理除一个excluded.It之外的所有数组元素。当我提供这个元素作为我的位置时,它的打印“位置不排除”,即使它被排除了。

我如何使我的代码得到这个元素以及排除?

代码语言:javascript
复制
use strict;
use warnings;

my @excluded = (
 "xyz/efg/headers/",
 "abc/def/libraries/jni-mr.h",
 "abc/def/libraries/linux_3.2.60-1+deb7u3.dsc", 
);

my $location = "abc/def/libraries/linux_3.2.60-1+deb7u3.dsc";
my $badpath = 0;

foreach (@excluded) {
    # -- Check if location is contained in excluded array
    if ($location =~ /^$_/) {
       $badpath = 1;
       print "location is excluded : $location \n";
     }
   }

   if (! $badpath) {
      print "location is not excluded : $location \n";  
     }

期望产出:

代码语言:javascript
复制
location is excluded : abc/def/libraries/linux_3.2.60-1+deb7u3.dsc

当前产出:

代码语言:javascript
复制
location is not excluded : abc/def/libraries/linux_3.2.60-1+deb7u3.dsc
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-24 14:20:28

使用quotemeta($text)\Q$text\E (在双引号或正则表达式中)创建与$text值匹配的模式。换句话说,使用

代码语言:javascript
复制
if ($location =~ /^\Q$_\E/)

而不是:

代码语言:javascript
复制
if ($location =~ /^$_/)
票数 2
EN

Stack Overflow用户

发布于 2015-03-24 14:23:27

  • 看起来,您打算通过regex来定义您的排除,但是在这些正则表达式中,您还没有正确地逃脱regex元类。对于失败的情况,导致它失败的元数据是加号(+),它是大多数正则表达式(包括Perl)中的一个或多个乘数,但您需要匹配它。
  • 此外,我建议将^锚点从循环移动到每个单独的regex,这将使代码更加灵活,因为如果您愿意,可以选择不锚定一些排除正则表达式。
  • 另外,您应该使用qr()构造,它允许您预编译正则表达式,并保存在CPU上。
  • 此外,这个需求也是使用grep()的一个很好的选择。
代码语言:javascript
复制
use strict;
use warnings;

my @excluded = (
    qr(^xyz/efg/headers/),
    qr(^abc/def/libraries/jni-mr\.h),
    qr(^abc/def/libraries/linux_3\.2\.60-1\+deb7u3\.dsc),
);

my $location = 'abc/def/libraries/linux_3.2.60-1+deb7u3.dsc';

# -- Check if location is contained in excluded array
my $badpath = scalar(grep($location =~ $_, @excluded )) >= 1 ? 1 : 0;
if ($badpath) {
    print "location is excluded : $location \n";
} else {
    print "location is not excluded : $location \n";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29234874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档