regex - 什么是清除绝对路径的好 Perl 正则表达式?

标签 regex perl absolute-path taint

好吧,我尝试过但失败了,所以,我又来了。

我需要匹配我的绝对路径模式。

 /public_html/mystuff/10000001/001/10/01.cnt

我处于污点模式等。

#!/usr/bin/perl -Tw
use CGI::Carp qw(fatalsToBrowser);
use strict;
use warnings;
$ENV{PATH} = "bin:/usr/bin";
delete ($ENV{qw(IFS CDPATH BASH_ENV ENV)});

我需要打开同一个文件几次或更多次,污点迫使我每次都取消文件名的污点。尽管我可能做错了其他事情,但我仍然需要帮助构建此模式以供将来引用。

my $file = "$var[5]";
if ($file =~ /(\w{1}[\w-\/]*)/) {
$under = "/$1\.cnt";
} else {
ErroR();
}

从我的初学者尝试可以看出,我几乎一无所知。

由于我的正则表达式构造不佳但有效,我不得不将正斜杠和扩展名添加到 $1

所以,我需要帮助来学习如何修复我的表达式,使 $1 代表 /public_html/mystuff/10000001/001/10/01.cnt

谁能在这里握住我的手,教我怎么做:

$file =~/(\w{1}[\w-\/]*)/ 匹配我的绝对路径 /public_html/mystuff/10000001/001/10/01 .cnt

感谢您的帮助。

最佳答案

编辑:使用$在模式中(就像我之前所做的那样)在这里是不可取的,因为它可以匹配 \n在文件名的末尾。使用 \z相反,因为它明确匹配字符串的结尾。

匹配的内容尽可能具体:

my $fn = '/public_html/mystuff/10000001/001/10/01.cnt';

if ( $fn =~ m!
    ^(
        /public_html
        /mystuff
        /[0-9]{8}
        /[0-9]{3}
        /[0-9]{2}
        /[0-9]{2}\.cnt
     )\z!x ) {
     print $1, "\n";
 }

或者,您可以通过放置我认为是公共(public)前缀的 '/public_html/mystuff' 来减少代码占用的垂直空间。在变量中并将各种组件组合在 qr// 中构造(参见 perldoc perlop ),然后使用条件运算符 ?: :

#!/usr/bin/perl

use strict;
use warnings;

my $fn = '/public_html/mystuff/10000001/001/10/01.cnt';
my $prefix = '/public_html/mystuff';
my $re = qr!^($prefix/[0-9]{8}/[0-9]{3}/[0-9]{2}/[0-9]{2}\.cnt)\z!;

$fn = $fn =~ $re ? $1 : undef;

die "Filename did not match the requirements" unless defined $fn;
print $fn, "\n";

此外,我无法像您那样使用相对路径进行协调

$ENV{PATH} = "bin:/usr/bin";

使用污点模式。你是说

$ENV{PATH} = "/bin:/usr/bin";

关于regex - 什么是清除绝对路径的好 Perl 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562491/

相关文章:

ruby - 在ruby中,如何找到给定字符串的第一个非空白字符的索引

javascript - 正则表达式按名称查找函数,其声明可以采用任何格式

perl - 如何使用 Perl 库 Crypt::OpenSSL::X509 正确获取 SAN

python - 在 Python 中操作目录路径

c++ - 如何匹配以大写字母和非大写字母开头的单词?

ruby - 表示 "at least one non-digit"的正则表达式

perl - 在do循环中替代 "last"

perl - Perl 的 LWP::UserAgent 包中的 "Non-blocking socket operation"错误

javascript - AngularJs 中的图像路径

javascript - 使用 JavaScript 的 SWC : How to handle CSS imports and how to absolute imports?