2013-04-25 72 views
0

我正在使用正則表達式搜索目錄中的關鍵字列表。這裏是我當前的代碼:如何在perl中顯示確切的搜索關鍵字

if (/$search/i) 
    { 

     printf $out "%s\t%s\n",$File::Find::name,$1;  
    } 

在我上面的代碼$1是隻給關鍵字詞組。 但我想要整個關鍵字。

例如:我在尋找 「掃」

電流輸出:C:\ac\acfrd\file.sql SWEEP。 但該文件包含單詞「SWEEP_ID」,我希望輸出爲「SWEEP_ID」,而不是「SWEEP」。

回答

5

試試這個正則表達式:

/\b(\w*$search\w*)\b/i 

它抓住了你的搜索條件和可選的相鄰字符號\w - 字母,數字等)進入$1。捕獲的字符序列被字邊界包圍\b - 標點符號,空格,字符串開始或結束)。

上面的正則表達式允許在搜索詞前後添加額外的單詞符號。如果你只想讓其他符號後您的搜索字詞(如你的例子),只是刪除了第一\w*

/\b($search\w*)\b/i 

如果你不想靠「字符號」的Perl的定義,然後用你自己的角色類替換\w,例如(只允許字母和下劃線):

/\b([_a-z]*$search[_a-z]*)\b/i 
+1

如果從'\ w',你需要從移開搬走'\ b'。最後一個應該是:'/(?<![_ a-z])([_ a-z] * $ search [_a-z] *)(?![_ a-z])/ i' /(?<![_ \ pL])([_ \ pL] * $ search [_ \ pL] *)(?![_ \ pL])/ i') – ikegami 2013-04-25 14:09:36

+0

@ikegami:我不想去太深,解釋前瞻/後視,但實際上你是對的......感謝您指出這一點。對您的評論+1。 – 2013-04-25 18:12:01

+0

@AlexShesterov:它在工作感謝您的幫助。我是perl的begineer,你能幫我找到任何網站,我可以在哪裏更詳細地瞭解perl。 – Ramesh 2013-04-26 05:15:34

0
/($search\S+)/ 

這可能會工作,但你的問題是不明確......