你需要在開始使用(?s)
你partialFiltered
re gex允許評論跨越多行(例如見Pattern.DOTALL with String.replaceAll)。
但隨後的/\\*.*\\*/
中間.*
使用貪婪比賽,所以我希望它來代替兩個獨立的註釋塊之間的一大堆。例如,考慮到以下幾點:
/* Comment #1 */
for (i = 0; i < 10; i++)
{
i++
}
/* Comment #2 */
沒有測試過我的臉這使我冒着雞蛋,但希望它取出一大堆,包括在中間,而不是僅僅兩個註釋的代碼。防止的方法之一是使用.*?
使內部匹配非貪婪,即儘可能少的匹配:
String partialFiltered = code.replaceAll("(?s)/\\*.*?\\*/", "");
由於fullFiltered
正則表達式不(?s)
開始,它應該沒有(?=\\n)
工作(因爲replaceAll
正則表達式不跨越多行默認情況下) - 所以你應該能夠將其改爲:
String fullFiltered = partialFiltered.replaceAll("//.*", "");
也有可能問題,尋找字符表示註釋,如如果它們出現在字符串或正則表達式模式中,但我認爲這些對於您的應用程序並不重要 - 如果它們可能是使用簡單正則表達式的道路的末端,並且您可能需要解析器而不是...
沒有任何的下方回答您的Q& –