2017-01-07 76 views
1

我試圖編寫正則表達式來查找給定文件中的所有註釋。我應該處理的意見是multyline commnes如正則表達式來匹配所有評論//,/ * */

/* comments. 
is multiline comment*/ 

// one liner comment. 

我搜索的幾個地方,發現了一些答案。 (one answer),我設法寫一些東西,回答我的大部分需求:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|//.*\n?) 

是錯我的代碼,它捕獲的字符串裏的評論的唯一的事情。例如

String str = " hey, // I'm not a comment " 

我的代碼獲得了「我不評論」 ,但它不應該。 我嘗試了一些東西,如負向預覽和lookbehind,但似乎沒有任何工作。

有沒有辦法做我想要的?/ 謝謝。

編輯: 我使用的語言是Python

+0

在這種情況下,將python標籤添加到您的問題。 –

+2

不要使用正則表達式來解析編程語言。正如你已經注意到的,正則表達式無法做到這一點。這是一個嚴格的限制,沒有解決辦法,無論如何每個解決方案都試圖做到這一點是不正確的。 – Tomalak

回答

1

一般情況下,可以考慮使用一個分析器,而不是(考慮到嵌套評論等)。話雖這麼說,你可以使用(*SKIP)(*FAIL)結構如果支持(你沒有指定你的編程語言):

"[^"]+"(*SKIP)(*FAIL) 
| 
'[^']+'(*SKIP)(*FAIL) 
| 
(?| 
    //(?P<comment>.+) 
| 
    /\*(?P<comment>[\s\S]+?)\*/ 
) 

a demo on regex101.com

+0

我正在用python編寫。 我不知道這種語法,如果我試圖在我的程序中使用您的代碼(可能是因爲您爲其他語言編寫的代碼),它不起作用。 有沒有像這樣的Python的東西? –

+0

有,使用較新的['regex'](https://pypi.python.org/pypi/regex)模塊('pip install regex')並使用上面的正則表達式的詳細模式。 – Jan