加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 量词在正则表达式中没有任何关系

发布时间:2020-12-15 22:05:03 所属栏目:大数据 来源:网络整理
导读:我的要求是使用perl打印文件名中包含’xyz’文本的文件. 我在下面尝试并得到以下错误 量词在正则表达式中没有任何内容,标记为 - HERE,m / * - HERE xyz.xlsx $/; use strict;use warnings;my @files = qw(file_xyz.xlsx,file.xlsx);my @my_files = grep { /*
我的要求是使用perl打印文件名中包含’xyz’文本的文件.
我在下面尝试并得到以下错误

量词在正则表达式中没有任何内容,标记为< - HERE,m / *< - HERE xyz.xlsx $/;

use strict;
use warnings;

my @files = qw(file_xyz.xlsx,file.xlsx);
my @my_files = grep { /*xyz.xlsx$/ } @files;
for my $file (@my_files) {
    print "The output $file n";
}

当我在grep正则表达式中添加*时,问题就出现了.
我怎么可能实现这个目标?

解决方法

*是元字符,称为量词.这意味着“重复前一个字符或字符类零次或多次”.在您的情况下,它什么都不遵循,因此是语法错误.你可能正在尝试的是匹配任何东西,即.*:通配符,然后是量词.但是,这已经是正则表达式匹配的默认行为,除非它已锚定.所以你需要的是:
my @my_files = grep { /xyz/ } @files;

你可以保持你的字符串锚xlsx $的结尾,但由于你有一个有限的文件名列表,这似乎没有必要.虽然您使用了qw()错误,但它不是以逗号分隔,而是以空格分隔:

my @files = qw(file_xyz.xlsx file.xlsx);

但是,如果您应该拥有更大的文件名集,例如从目录中读取的文件名,则可以在中间放置通配符字符串:

my @my_files = grep { /xyz.*.xlsx$/i } @files;

请注意使用/ i修饰符来区分大小写不敏感.还要注意你必须逃脱.因为它是另一个元字符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读