Text-Processing
Perl::查找子字元串並顯示整個單詞
我有一個文本文件,其中包含一些數據,例如:
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)
我無法理解出了什麼問題。
沒有什麼問題,它可以正常工作,但是您誤解了正則表達式的工作原理。意思是“
.
匹配任何字元”,所以.V15M
會匹配DV15
inPADV15MA0
,這就是你得到的原因: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"; } } }