Regex 量化捕获的正则表达式

Regex 量化捕获的正则表达式,regex,perl,quantify,Regex,Perl,Quantify,我正在脚本中查找文件路径。所以我要写一个剧本 翻出文件,然后查找“/” 我更愿意使用perl正则表达式,只想grep出文件路径 foo@foohost:~ $ cat /sbcimp/dyn/data/FOO/GSD/scripts/FOOonoff.pl | grep "/" #!/usr/bin/perl my $output_file = "/sbcimp/dyn/data/stmFOO3/dailymetrics/PartRates/file6.csv"; my $input_file

我正在脚本中查找文件路径。所以我要写一个剧本 翻出文件,然后查找“/”

我更愿意使用perl正则表达式,只想grep出文件路径

foo@foohost:~ $ cat /sbcimp/dyn/data/FOO/GSD/scripts/FOOonoff.pl | grep "/"

#!/usr/bin/perl
my $output_file = "/sbcimp/dyn/data/stmFOO3/dailymetrics/PartRates/file6.csv";
my $input_file_name_ESTATE = "/sbcimp/dyn/sym/data/stmFOO3/part_rates/FOO_estate.$year$month1$day1.1630.csv";
my $input_file_name_ESTATE = "/sbcimp/data/stmFOO3/part_rates/FOO_estate.20140829.1630.csv";
my $input_file_name_ESTATE2 = "/sbcimp/part_rates/FOO_estate.$year$month1$day2.1630.csv";
my $input_file_name_ESTATE3 = "/sbcimp/FOO_estate.$year$month2$day3.1630.csv";
my $input_file_name_NEW = "/sbcimp/dyn/data/stmFOO3/dailymetrics/RiskTiers/new_terms.csv";
    $argVal =~ s/\s+$//;
    $argVal =~ s/^\s+//;
    $argVal =~ s/\"$//;
    $argVal =~ s/^\"//;
    $argVal =~ s/\'$//;
    $argVal =~ s/^\'//;
如果我对文件进行分类并将其通过perl one liner,则只会得到根目录

foo@foohost:~ $ cat /sbcimp/dyn/data/FOO/GSD/scripts/FOOonoff.pl | perl -nle 'print /(\/\w+\/)/' | sort -u

/sbcimp/
我理解正则表达式中的量词,但如果我使用“print/(/\w+/){1,9}/”,这不会给我“/w+/…1次或9次。我将寻找距离根路径1次或多次的路径。
如何量化整个捕获的正则表达式,而不仅仅是最后一个字符?

我建议不要使用正则表达式来解析Perl代码,而是使用

下面将解析您为字符串提供的perl行,将它们简化为基本内容,然后提取路径信息:

use strict;
use warnings;

use PPI;
use File::Basename;

my $src = do {local $/; <DATA>};

# Load a document
my $doc = PPI::Document->new( \$src );

# Find all the strings within the doc
my $strings = $doc->find( 'PPI::Token::Quote' );
for (@$strings) {
    my $str = eval 'no strict; no warnings; '. $_->content;
    next if $@ || $str !~ /\//;

    my ($name, $path) = fileparse($str);

    print "$path\n";
}

__DATA__
#!/usr/bin/perl
my $output_file = "/sbcimp/dyn/data/stmFOO3/dailymetrics/PartRates/file6.csv";
my $input_file_name_ESTATE = "/sbcimp/dyn/sym/data/stmFOO3/part_rates/FOO_estate.$year$month1$day1.1630.csv";
my $input_file_name_ESTATE = "/sbcimp/data/stmFOO3/part_rates/FOO_estate.20140829.1630.csv";
my $input_file_name_ESTATE2 = "/sbcimp/part_rates/FOO_estate.$year$month1$day2.1630.csv";
my $input_file_name_ESTATE3 = "/sbcimp/FOO_estate.$year$month2$day3.1630.csv";
my $input_file_name_NEW = "/sbcimp/dyn/data/stmFOO3/dailymetrics/RiskTiers/new_terms.csv";
    $argVal =~ s/\s+$//;
    $argVal =~ s/^\s+//;
    $argVal =~ s/\"$//;
    $argVal =~ s/^\"//;
    $argVal =~ s/\'$//;
    $argVal =~ s/^\'//;

我建议不要使用正则表达式来解析Perl代码,而是使用

下面将解析您为字符串提供的perl行,将它们简化为基本内容,然后提取路径信息:

use strict;
use warnings;

use PPI;
use File::Basename;

my $src = do {local $/; <DATA>};

# Load a document
my $doc = PPI::Document->new( \$src );

# Find all the strings within the doc
my $strings = $doc->find( 'PPI::Token::Quote' );
for (@$strings) {
    my $str = eval 'no strict; no warnings; '. $_->content;
    next if $@ || $str !~ /\//;

    my ($name, $path) = fileparse($str);

    print "$path\n";
}

__DATA__
#!/usr/bin/perl
my $output_file = "/sbcimp/dyn/data/stmFOO3/dailymetrics/PartRates/file6.csv";
my $input_file_name_ESTATE = "/sbcimp/dyn/sym/data/stmFOO3/part_rates/FOO_estate.$year$month1$day1.1630.csv";
my $input_file_name_ESTATE = "/sbcimp/data/stmFOO3/part_rates/FOO_estate.20140829.1630.csv";
my $input_file_name_ESTATE2 = "/sbcimp/part_rates/FOO_estate.$year$month1$day2.1630.csv";
my $input_file_name_ESTATE3 = "/sbcimp/FOO_estate.$year$month2$day3.1630.csv";
my $input_file_name_NEW = "/sbcimp/dyn/data/stmFOO3/dailymetrics/RiskTiers/new_terms.csv";
    $argVal =~ s/\s+$//;
    $argVal =~ s/^\s+//;
    $argVal =~ s/\"$//;
    $argVal =~ s/^\"//;
    $argVal =~ s/\'$//;
    $argVal =~ s/^\'//;

我建议不要使用正则表达式来解析Perl代码,而是使用

下面将解析您为字符串提供的perl行,将它们简化为基本内容,然后提取路径信息:

use strict;
use warnings;

use PPI;
use File::Basename;

my $src = do {local $/; <DATA>};

# Load a document
my $doc = PPI::Document->new( \$src );

# Find all the strings within the doc
my $strings = $doc->find( 'PPI::Token::Quote' );
for (@$strings) {
    my $str = eval 'no strict; no warnings; '. $_->content;
    next if $@ || $str !~ /\//;

    my ($name, $path) = fileparse($str);

    print "$path\n";
}

__DATA__
#!/usr/bin/perl
my $output_file = "/sbcimp/dyn/data/stmFOO3/dailymetrics/PartRates/file6.csv";
my $input_file_name_ESTATE = "/sbcimp/dyn/sym/data/stmFOO3/part_rates/FOO_estate.$year$month1$day1.1630.csv";
my $input_file_name_ESTATE = "/sbcimp/data/stmFOO3/part_rates/FOO_estate.20140829.1630.csv";
my $input_file_name_ESTATE2 = "/sbcimp/part_rates/FOO_estate.$year$month1$day2.1630.csv";
my $input_file_name_ESTATE3 = "/sbcimp/FOO_estate.$year$month2$day3.1630.csv";
my $input_file_name_NEW = "/sbcimp/dyn/data/stmFOO3/dailymetrics/RiskTiers/new_terms.csv";
    $argVal =~ s/\s+$//;
    $argVal =~ s/^\s+//;
    $argVal =~ s/\"$//;
    $argVal =~ s/^\"//;
    $argVal =~ s/\'$//;
    $argVal =~ s/^\'//;

我建议不要使用正则表达式来解析Perl代码,而是使用

下面将解析您为字符串提供的perl行,将它们简化为基本内容,然后提取路径信息:

use strict;
use warnings;

use PPI;
use File::Basename;

my $src = do {local $/; <DATA>};

# Load a document
my $doc = PPI::Document->new( \$src );

# Find all the strings within the doc
my $strings = $doc->find( 'PPI::Token::Quote' );
for (@$strings) {
    my $str = eval 'no strict; no warnings; '. $_->content;
    next if $@ || $str !~ /\//;

    my ($name, $path) = fileparse($str);

    print "$path\n";
}

__DATA__
#!/usr/bin/perl
my $output_file = "/sbcimp/dyn/data/stmFOO3/dailymetrics/PartRates/file6.csv";
my $input_file_name_ESTATE = "/sbcimp/dyn/sym/data/stmFOO3/part_rates/FOO_estate.$year$month1$day1.1630.csv";
my $input_file_name_ESTATE = "/sbcimp/data/stmFOO3/part_rates/FOO_estate.20140829.1630.csv";
my $input_file_name_ESTATE2 = "/sbcimp/part_rates/FOO_estate.$year$month1$day2.1630.csv";
my $input_file_name_ESTATE3 = "/sbcimp/FOO_estate.$year$month2$day3.1630.csv";
my $input_file_name_NEW = "/sbcimp/dyn/data/stmFOO3/dailymetrics/RiskTiers/new_terms.csv";
    $argVal =~ s/\s+$//;
    $argVal =~ s/^\s+//;
    $argVal =~ s/\"$//;
    $argVal =~ s/^\"//;
    $argVal =~ s/\'$//;
    $argVal =~ s/^\'//;

可能应该是
/^\/(\w++\/)+/
。捕获第一个斜杠,然后捕获任意数量的
\w++/
序列。不过,最简单的方法是删除字符串末尾的任何非斜杠符号(例如,使用
s~[^/]+$~
),所以这不是真正可以量化的?应该是
/^\/(\w++/)+/
取而代之。先捕获第一个斜杠,然后捕获任意数量的
\w+/
序列。不过,最简单的方法是删除字符串末尾的任何非斜杠符号(例如,使用
s~[^/]+$~
),所以这不是真正可以量化的?应该是
/^\/(\w+\/)+/
取而代之。先捕获第一个斜杠,然后捕获任意数量的
\w+/
序列。不过,最简单的方法是删除字符串末尾的任何非斜杠符号(例如,使用
s~[^/]+$~
),所以这不是真正可以量化的?应该是
/^\/(\w+\/)+/
取而代之。捕获第一个斜杠,然后捕获任意数量的
\w+/
序列。不过,最简单的方法是删除字符串末尾的任何非斜杠符号(例如,使用
s~[^/]+$~
),所以这不是真正可以量化的?