2015-11-07 61 views
1

假設我有一個巨大的文件。這個龐大的文件包含一堆代碼。在這個代碼中,每個函數都以XML格式記錄。每個文檔都包含在「文檔註釋」(/ **和** /)中。我想要一個正則表達式,它將刪除不在文檔註釋之間的所有代碼(這也包括文檔註釋,但如果需要,我可以在之後刪除它們)。如何使用RegEx從文件獲取文檔註釋?

的腳本的一部分例子:

/**--------------------------------------------------------------------------**\ 
<summary>FunctionName</summary> 
<returns> 
    Returns 1 on success. 
    Returns 0 on failure. 
</returns> 
<remarks> 
    This function is a function. 
</remarks> 
\**--------------------------------------------------------------------------**/ 

int FunctionName() 
{ 
    int X = 1; 
    if(X == 1) 
     return 1; 
    return 0; 
} 

預期輸出:

<summary>FunctionName</summary> 
<returns> 
    Returns 1 on success. 
    Returns 0 on failure. 
</returns> 
<remarks> 
    This function is a function. 
</remarks> 
+1

所以,你想創建一個包含單獨的文檔註釋文檔?不要認爲它是*刪除*或*不包括*你不想要的部分,只是匹配你想做的部分並將它們寫入新文件。 –

回答

1

您可以使用此模式:

/^\/(\*\*-+\*\*)\\$(.*?)^\\\1\/$|./gsm 

$2取代。

工作例如:https://regex101.com/r/fA8bP0/1

的技巧是基本相同Regex Pattern to Match, Excluding when…/Except between - 交替使用,以配合我們所需要的,並跳過我們不想要的一切。非必需

  • ^$ - 這取決於是否意見上一整行:

    ,關於模式的一些注意事項。您可以刪除它們,並刪除/m(多行)標誌。

  • \/(\*\*-+\*\*)\\匹配整條評論,/**-------**\
  • 我們假設這些塊末尾的連字符數與末尾相同,並將其捕獲到\1。如果這不正確,請再次使用\*\*-+\*\*而不是\1。如果您有固定數量的連字符,則可以使用-{74}
  • 有趣的內容被捕獲到$1
  • 其他所有內容都與.相匹配,並將其替換掉。
  • 警告:這種模式可能無法在平時的方式 - 包含"/**-"字符串,註釋代碼看起來像文件,轉義字符等