다음과 같은 일부 데이터가 포함된 텍스트 파일이 있습니다.
PADHOGOA1 IOP055_VINREG5_1 ( .IO(VINREG5_1), .MONI(),
.MON_D(px_IOP055_VINREG5_1_MON_D), .R0T(px_IOP054_VINREG5_0_R0T),
.IO1() );
PADV30MA0 IOP056_VOUT3_IN ( .IO(VOUT3_IN),
.V30M(px_IOP056_VOUT3_IN_V30M));
PADV30MA0 IOP057_VOUT3_OUT ( .IO(VOUT3_OUT),
.V30M(px_IOP057_VOUT3_OUT_V30M) );
PADV15MA0 IOP059_VOUT15_OUT ( .IO(VOUT15_OUT),
.V15M(px_IOP059_VOUT15_OUT_V15M) );
PADHOGOA1 IOP064_VREFLB ( .IO(VREFLB), .MONI(), .MON_D(px_IOP064_VREFLB_MON_D), .R0T(px_IOP064_VREFLB_R0T), .IO1() );
내 하위 문자열은.V15M
이 하위 문자열을 찾아서 전체 단어를 표시하고 싶습니다.
원하는 출력:
.V15M(px_IOP059_VOUT15_OUT_V15M)
도움이 필요합니다.
내가 시도하는 코드는 다음과 같습니다
my $var= '.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
chomp;
@words=split(",",$_);
foreach my $word(@words){
if($word =~ /$var/){
print "FOUND",$word, "\n";
}
}
}
내가 얻는 결과는 다음과 같습니다. PADV15MA0 IOP059_VOUT15_OUT ( .IO(VOUT15_OUT)
무엇이 잘못되었는지 이해할 수 없습니다.
답변1
아무런 문제가 없고 작동하지만 정규식이 어떻게 작동하는지 오해했습니다. 이는 .
"모든 문자와 일치"를 의미하므로 에서 .V15M
일치하므로 다음과 같은 결과를 얻을 수 있습니다.DV15
PADV15MA0
FOUND PADV15MA0 IOP059_VOUT15_OUT ( .IO(VOUT15_OUT)
FOUND .V15M(px_IOP059_VOUT15_OUT_V15M) );
당신이 원하는 것은 다음과 같습니다.
#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
chomp;
@words=split(",",$_);
foreach my $word(@words){
if($word =~ /$var/){
print "FOUND",$word, "\n";
}
}
}
그러면 다음이 반환됩니다.
FOUND .V15M(px_IOP059_VOUT15_OUT_V15M) );
그러나 코드에는 단어만 필요하다고 표시되어 있으므로 이 경우 입력 줄을 쉼표 대신 공백으로 구분하십시오(파일에는 쉼표가 없습니다).
#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
chomp;
@words=split(" ",$_);
foreach my $word(@words){
if($word =~ /$var/){
print "FOUND ",$word, "\n";
}
}
}
답변2
다음과 같이 이 작업을 수행할 수 있습니다.
$ perl -lsne 'print "FOUND: >>>$1<<<" if /(\Q$pin\E\((?:(?!\))\H)*\))/' -- -pin=".V15M" inp
결과:
FOUND: >>>.V15M(px_IOP059_VOUT15_OUT_V15M)<<<
피복재:
- 정규식은 핀을 찾은 다음 왼쪽 대괄호부터 가장 가까운 오른쪽 대괄호까지 찾습니다.