Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 打印在perl正则表达式后收集的名称_Regex_Perl - Fatal编程技术网

Regex 打印在perl正则表达式后收集的名称

Regex 打印在perl正则表达式后收集的名称,regex,perl,Regex,Perl,好的,我需要使用perl在一个txt文件中收集人名,我可以找到人名并用name:front使用正则表达式打印出来,但是我需要使用正则表达式收集我想要的人名,因为每个文件中有多个不同的人名要收集 文件输入示例: NAME: Bigelow, Patrick R DATE: 28 Apr 2014 最好使用两行代码,一行用于剥离名称(介于名称:…日期:之间),然后拆分名称以获得逗号 my ($tmp) = /(

好的,我需要使用perl在一个txt文件中收集人名,我可以找到人名并用name:front使用正则表达式打印出来,但是我需要使用正则表达式收集我想要的人名,因为每个文件中有多个不同的人名要收集

文件输入示例:

NAME: Bigelow, Patrick R DATE: 28 Apr 2014
最好使用两行代码,一行用于剥离名称(介于
名称:…日期:
之间),然后拆分名称以获得逗号

my ($tmp) = /(?<=NAME: )(.*?)(?=\s+DATE:)/g or next;
my @arr = split(/,\s+/, $tmp);

my($tmp)=/(?您可以使用
s/regex/replace/
来做您想做的事情。我避免使用后期修复循环(添加更多行时容易错过,修复起来很痛苦)和使用
$\uuu
(不会提高可读性,实现不稳定,并且是全局范围):


在本例中,使用lookahead和lookahead是多余的,因为您有一个显式的捕获块。此外,不需要/g标志。这段代码看起来很棒,但其中有一些功能我没有,AutoDie就是其中之一。但问题是,这是否会限制我以后在代码中获取日期l?您使用的是什么版本的Perl?Autodie从5.12开始就存在,并且从5.10开始就有了
功能qw(比如说)
。其他一切都应该可以。如果您是5.10之前的版本,请使用
打印
(不要忘记
\n
)并使用
打开…或死qq(…);
语法检查
的返回。
my ($tmp) = /(?<=NAME: )(.*?)(?=\s+DATE:)/g or next;
my @arr = split(/,\s+/, $tmp);
use strict;
use strict;
use warnings;
use autodie;
use feature qw(say);

use constant {
    TEXT_FILE  =>   'file.txt',
    NAME_LINE  =>   qr/^NAME:\s+/,
};

open my $name_fh, "<", TEXT_FILE;   # Autodie eliminates need for testing if this worked
while ( my $line = <DATA> ) {
    chomp $line;
    next unless $line =~ NAME_LINE;  # Skip lines if they don't contain name
    ( my $name = $line ) =~ s/NAME:\s+(.+?)\s+DATE.*/$1/;
    say qq("$name");
}
close $name_fh;
print join ": ", @foo . "\n"; # Doesn't work.
say join ": ", @foo;          # This works fine.