Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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,我有一句话要说 my$replacedName=UTSXAOU0120JTE01 文件名$file=“hosts.txt”包含: 1: UTSXAOU0120JTE02 UTSXAOU0120JTE04 2: UTSXAOU0120JTE06 UTSXDOK0120JTE07 3: UTSXAOU0120JDM01 UTSXAOU0120JDM03 代码如下: open(FH, $file) or die ("file not found"); while(my $temp

我有一句话要说

my$replacedName=UTSXAOU0120JTE01

文件名$file=“hosts.txt”包含:

1: UTSXAOU0120JTE02 UTSXAOU0120JTE04
2: UTSXAOU0120JTE06 UTSXDOK0120JTE07
3: UTSXAOU0120JDM01 UTSXAOU0120JDM03
代码如下:

open(FH, $file) or die ("file not found");
while(my $temp = <FH>)
{
    my @parts = split(/\s+/, $temp);
    if($parts[1])
    {
        if ( $parts[1]=~ grep(/\w{17}TE\d{2}$/, $replacedName))
        {
            print "$parts[1] - FOUND\n" ;
            last;
        }
    }
}
注:“UTSXAOU0120JTE04
UTSXAOU0120可以是任何东西,最后两个数字也可以是任何东西,如08、17、06等“

根据提供的信息,问题描述得很糟糕,OP可能正在寻找以下类型的东西

use strict;
use warnings;
use feature 'say';

my $data = do { local $/; <DATA>; };
my @found = $data =~ /(\w{12}TE\d{2})/g;

say join ' ', sort @found;

__DATA__
1: UTSXAOU0120JTE02 UTSXAOU0120JTE04
2: UTSXAOU0120JTE06 UTSXDOK0120JTE07
3: UTSXAOU0120JDM01 UTSXAOU0120JDM03

如果提供的输出不匹配,并且提供的输入不包含此字符串,则从输出的问题和输出的问题来看,不明显扮演什么角色。

当前代码有什么问题?您的示例不容易复制。文本文件是三行还是一行?我们需要查看所需的输入(文件)和给定输入的所需输出。此外,代码示例不完整,无法编译。乍一看,你似乎在使用grep,而你应该使用一个简单的正则表达式。它有多行,而不是一行好的,我可以看出你是正确的。接下来,您的输出示例需要修复。它与打印不匹配。您的输出中的“找到”在哪里?此外,由于最后一个状态,您只打印一个匹配项。提供的输出离您的代码太远,无法猜测您的意图。
use strict;
use warnings;
use feature 'say';

my $data = do { local $/; <DATA>; };
my @found = $data =~ /(\w{12}TE\d{2})/g;

say join ' ', sort @found;

__DATA__
1: UTSXAOU0120JTE02 UTSXAOU0120JTE04
2: UTSXAOU0120JTE06 UTSXDOK0120JTE07
3: UTSXAOU0120JDM01 UTSXAOU0120JDM03
UTSXAOU0120JTE02 UTSXAOU0120JTE04 UTSXAOU0120JTE06 UTSXDOK0120JTE07