Regex 需要获取文件中与模式匹配的所有字符串(Perl)
我有一句话要说 my$replacedName=UTSXAOU0120JTE01 文件名$file=“hosts.txt”包含: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
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