我正在研究一个使用Perl正则表达式的新项目,我正在寻找一种使用单行Perl Regular模式从本地文件检索文本的方法。
我希望正则表达式为单行形式,并注意编码:
^(?!.....(?:........)).*$
我不想使用类似“代码样”的形式:
use warnings;
use strict;
use feature qw(say);
use Path::Tiny;
my $file = shift // die "Usage: $0 file\n"; #/
my @words = split ' ', path($file)->slurp;
my $exclude = join '|', map { quotemeta } @words;
foreach my $string (qw(a1testtre orangesh1 apleship3))
{
........
........
}
}
我的最终目标是搜索(使用一行Perl正则表达式!! )一个txt文件的字符串,然后检查其中一个是否属于我正在测试的字符串的一部分。 到目前为止,我已经创建了一个Perl正则表达式
-> ^(?!.*(?:banned)).*$
检查我正在测试的字符串中是否包含“ banned”一词。
在此处查看示例:https://regex101.com/r/toQpCb/1
现在我是否可以用某种方式将“被禁止的”世界替换为我希望可以使用的本地文件(txt)的内容。合适的解决方案可能是:
^(?!.*(?:\someway_the_string_from_me_local_txt_file\)).*$
答案 0 :(得分:1)
您要检查每个位置都不是您所说的一个单词的开头,所以您实际上想要
^(?:(?!WORD1|WORD2|...).)*\z
如此
my $good_re = qr/^(?:(?!$exclude).)*\z/s;
if ($string =~ $good_re) {
# Good
} else {
# Bad
}
但是,与其检查字符串是否“安全”,不如检查它是否不安全(然后简单地将结果取反),效率更高。
my $bad_re = qr/$exclude/;
if ($string =~ $bad_re) {
# Bad
} else {
# Good
}