2016-09-25 35 views
0

我想在一個文件中找到某個特定模式之後,特定模式之前的一個單詞。 下面是從文件中的內容:找到一個字是在一個模式之後,在使用perl的另一個模式之前

print("Hi", "My name is", "Tej"); 

所以,我想這個詞Tej單獨並將其存儲到一個數組。同樣,我有很多這樣的文件,其模式與上面類似,但名稱不同,所以我想將所有這些名稱都推送到一個數組中。即,我想要來自文件print("Hi", "My name is", "之後和圖案");之前的文字。

有時,逗號後的空格不見了。

我寫了用於打開文件並將文件句柄傳遞給函數以搜索模式之前和之後的單詞的腳本。該函數的代碼如下:

sub search{          
my $file_handle = shift; 
while (<$file_handle>) 
{ 
/.print("Hi", "My name is", "[\s]+([A-Za-z_0-9]+)/ ; 
push @array, $1; 
} 
} 

我知道正則表達式不工作,但我不知道如何找到我所需要的單詞。提供的任何幫助表示讚賞。 感謝

回答

-1

這是我會怎麼做:

sub search {          
    my $file_handle = shift; 
    while (<$file_handle>) { 
     if (/print\("Hi", ?"My name is", ?"([^"]+)"\);/) { 
      push @array, $1; 
     } 
    } 
} 

我(在這種情況下,即())躲過了特殊字符的正則表達式裏面,我用"([^"]+)"匹配裏面的所有非報價引號。

空格後面的問號表示空格的存在是可選的。

+0

感謝您的快速響應。你的邏輯幫助。 –

+0

提示:'if(/ print \(「Hi」,?「我的名字是」,?「([^」] +)「\); /){@@@@@@@@@; as'if(my($ name)=/print \(「Hi」,?「我的名字是」,?「([^」] +)「\); /){@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@。爲了避免不必要地使用全局變量,或者甚至將其作爲'push @array,/ print \(「Hi」,?「我的名字是」,?「([^」] +)「\); /;' – ikegami

相關問題