2009-09-15 57 views
0

我想得到一個匹配java評論中的標記的正則表達式,所以我可以用.net註釋替換它。正則表達式來匹配評論中的標記

例如,我有這樣的:

/** 
* Some method description 
* 
* @param paramName Parameter description 
*   which may span more than 1 line 
* @return return value. 
* @throws ExceptionName some exception description 
*   again may span more than 1 line. 
*/ 

,我想這個落得:

/// 
/// Some method description 
/// 
/// <param name="paramName"> Parameter description 
///   which may span more than 1 line</param> 
/// <returns> return value.</returns> 
/// <exception cref="ExceptionName"> some exception description 
///   again may span more than 1 line.</exception> 
/// 

是我不知道的是對付匹配的最佳方式的一部分@tag以及之後的潛在名稱以及如何匹配尖括號之間的內部文本。

任何想法讚賞。

回答

1

單個正則表達式並不是最好的辦法,因爲你不會用@param和@throws與@return做同樣的事情。在Perl或Python中編寫腳本將使這項任務變得更加容易。

話雖這麼說,這應該讓你對你的方式...(所有這些都是在Python語法)這樣的:

(?i)(?s)(/\*\*.*?\*/) 

會得到整個註釋。此:

^(/\*\*|\*/|\*)(.*)$ 

替換爲/// \ 2將使用.Net註釋打開所有評論星。

(?i)(?s)(^([^@]+)@param (\b.*\b)(.*?)(?!\* @return) 

(\1<param name="\2">\3</param>) 

替換應該修復的PARAM部。同樣地,

(?i)(?s)(^([^@]+)@throws (\b.*\b)(.*?)(?!\*/) 

(\1<exception cref="\2">\3</param>) 

替換應該修復的拋出部分。最後,

@return (.*) 

替換爲\ 1應該修復@return。 (注意這個沒有設置爲多行[明星與EOL字符不匹配])

這將全部需要插入到腳本中(或者在您選擇的編輯器中一個接一個地運行)。

請注意,這些不會試圖解釋@ pram,@return,@throw部分中的任何流星。

+0

謝謝。是的,我不打算使用一個正則表達式,但將執行一系列替換。這將幫助我開始。非常感激。現在,如果只是它的.Net語法... :) – 2009-09-15 15:41:40

+0

恐怕我不知道.NET的正則表達式語法關閉我的頭頂。對http://www.regular-expressions.info/dotnet.html的快速瀏覽表明,您將希望將所有反向引用(例如\ 1)更改爲$ 1,並使用.NET的正則表達式類標誌(RegexOptions.IgnoreCase (?i)和RegexOptions.Singleline((s))。否則,它全部*應該*工作。 (測試在http://regexhero.net/tester/也許) – 2009-09-15 16:25:14