2017-06-14 96 views
1

我想將doxygen註釋插入到我的項目中。我希望儘可能自動執行此操作,因此我有了使用正則表達式以及搜索和替換功能的想法。
例子:正則表達式替換單行C++註釋

int var; //Explanation variable 

到:

int var; /**< @brief Explanation variable */ 

作爲獎勵,我也不想刪除我的代碼打算。
我嘗試不同的東西像

查找:.+;*// .+(找到相關線路)
替換:.+;*/**< @brief .+ */

問題是,它不插入原來的文本,它插入正則表達式爲純文本,並將其刪除代碼打算。 有沒有辦法正確地做到這一點?我已經閱讀了許多不同的帖子,但我無法得到它的工作。

+0

使用捕獲組/反向引用:'(。+; \ s *)// \ s *(。+)' - >'$ 1/** <@brief $ 2 * /'。 –

+0

您需要捕獲捕獲組中的原始文本,並在替換中使用反向引用。我不知道你用什麼工具進行這些替換以及使用哪種正則表達式引擎? – Doqnach

+0

@Doqnach我使用的是VS2017,但我也可以使用Eclipse Luna或Notepad ++。我會使用任何需要的。 – xMutzelx

回答

1

您需要使用capturing group S和backreferences

查找內容(.+;\s*)//\s*([^\r\n]+)
替換$1/**< @brief $2 */

regex demo

詳細

  • (.+;\s*) - 第1組(其值與從替換模式的$1編號反向引用訪問):比換行符字符,;,然後在其它任何一個或多個字符0+空格
  • // - 雙/
  • \s* - 0+空格
  • ([^\r\n]+) - 第2組(其值爲$2從替換模式編號的反向引用):除換行符(\n)和回車符(\r)字符之外的任何1+字符(因爲.與.NET中的CR(\r)正則表達式)。

VS 2015年測試: enter image description here

+0

謝謝你的幫助,它幾乎完美地工作。最後一個問題是,結尾* /在一個新行上。 – xMutzelx

+1

@xMutzelx:我猜''(。+)'匹配你的情況中的'\ r' - 用'([^ \ r \ n] +)代替最後一個'(。+)'' –

+0

哇,它正在工作爲你。在VS2017中,它將* /放在一個新行上。 – xMutzelx

1

你可以試試這個:

^(\s*[^;]+;\s*)\/\/(.*)$ 

和替換本:

$1/**< @brief $2 */ 

Regex101Demo

+0

感謝您的幫助,像上面的答案一樣的問題。結尾* /在一個新行中。 – xMutzelx

0

我修改@WiktorStribizew的解決方案位,使之更加舒適:

查找:(.+;[^\r\n]\s*)//\s*([^\r\n]+)

我插入[^\r\n]到前面,以避免一些特殊情況,如:

int var; 
//Comment for the next function 
int function()