2016-10-22 98 views
0

我的源代碼,我想找到的所有行比用逗號,句號或加號',' , '.' , '+'結束,如何爲不以'/'開頭並以','或'。'結尾的行設置正則表達式。或'+'?

所以,我有這樣的:(\,|\.|\+)$ - 表明,任何與這些符號的終結線。

但我想忽略以// - 註釋行開頭的行,並且它們可以以任意數量的空格開頭。

我試圖忽略在/開頭處的行:^[^/].* 但這並不是很好。然後我還試圖在開始時放置:\s*忽略所有空格,但仍然不能正常工作。

所以,我的正則表達式將是這樣的:\s*^[^/].*(\,|\.|\+)$ - 跳過所有空格開頭,而忽略那些/作爲第一個符號,並顯示那些以結束每一行,+

但是,這仍然發現線這一點。從空間和/開始。我究竟做錯了什麼?

編輯: 下面是示例行:

... 
// increase no of objects... 
counter := 1+ 
2; 
... 

我需要忽略註釋行,開始//但需要與結尾的所有線路,+因爲我需要重新格式化。

+2

你打算用多回合方法要好得多做的 - 在命令行中,我會做這個用grep的'-v'過濾掉的意見,再進行第二次' grep「,它會查找你實際上*要*想要的行。否則,您將需要使用PCRE擴展,因此需要一個回溯正則表達式引擎,這可能會比僅應用兩個BRE或ERE的速度更慢。 –

+0

在最後一個正則表達式中,第一個「^」是什麼?你的意思是'\ s * [^ /]。*(\,| \。| \ +)$'?我不確定這是否也可以工作,這取決於貪婪...... – LarsH

+0

另外,重新:查爾斯關於回溯的評論,您使用哪種正則表達式? (什麼正則表達式工具?)這將幫助我們知道什麼功能可用。 – LarsH

回答

2

用一個單一的正則表達式來做到這一點的唯一方法就是使用負面倒序。然而,你最終會得到一個以^(?<!\s*\/)開頭的正則表達式,這是由於向後看的量詞而無效的。

這意味着實際工作的唯一方法是使用多個正則表達式。

[,.+]$ 

這個(字面意思是:

你想將匹配這個(字面意思是「一個逗號,一個點或者在該行的末尾加號」)行「零個或多個空格,然後在該行的開頭正斜槓」):

^\s*\/ 
+0

我不認爲我可以使用2個表達式...我無法在搜索結果中搜索。 –

+0

@MikeTorrettinni你可以記下匹配的行的行號。 – dorukayhan

+0

不是太多,代碼太多。這就是爲什麼認爲複雜的正則表達式可以幫助快速做到這一點。 –

2

也許它可以工作:

^(?!/|\s*/)+.*[\,\.\+]$

這個正則表達式忽略誰與/或零個或多個空格開始遵循/所有線路,並與,結束,.,或+

我希望能爲你效勞。

編輯:它可以降低:

^(?!\s*/)+.*[\,\.\+]$

我測試了這個正則表達式,你能怎麼看,它忽略了線192和匹配210,但它並沒有忽略內部線路塊註釋,因爲它不以/開頭。

Test for regular expression

+0

它可能是在Delphi中的正則表達式的限制,因爲它顯示錯誤; 'A,+,或*應該跟隨一個字符。 –

+1

我從來沒有在Delphi上編碼,但是其他編程語言,比如Java,你需要轉義一些字符,比如'?',''+'或'*'來表示它必須是文字字符。 –

+0

我正在嘗試但不起作用。如果我逃脫了?那麼它當然不會找到任何東西......'^(\?!\ s * /)+。* [\,\。\ +] $' –

相關問題