2012-10-05 68 views
2

我需要一個Perl正則表達式來刪除行尾註釋。我覺得我已經爲此搜索並找不到正確的東西。下面是詳細信息:刪除行尾註釋除非報價

EOL註釋用英鎊符號(#)表示

任何東西都可以用豎線被引用(|)

所以下面有一個評論:

foo bar #baz 

但以下不會:

foo |quoted###with bars| 

下面有一個COMME NT和包含批註文字報價:

foo |quoted###with bars| #comment here 

我想的第一件事就是s/#(?=[^|]*$).*$//,不幸的是去除了引述英鎊。不工作的下一件事就是/#(?=[^|]*$).*$//,因爲它沒有對多報價,如下所示:

foo |quote begins here ##still going 
     ##and it's still going| #this is a quote, though. 

我覺得我可能能夠在perlfaq6從正則表達式的C/C++的意見蒐集的東西,但對於我來說,抓取我需要的東西太複雜了(不需要多行註釋;)。

任何人都可以提供一個正則表達式來移除EOL註釋但忽略引用的註釋字符嗎?

回答

2

一種方法:

s/(\|[^|]*\|)|#.*/$1||''/eg

這將替換|...|(包括|...#...|)與自身,與#...什麼也沒有。

+0

幾乎...不包括多線事情。 –

+0

@NateGlenn:當然可以;你嘗試過嗎?當我在'abc | def#ghi'上使用它時,再加上一個換行符,再加上'klm | nop#qrs',它只會剝離'#qrs',因爲'#ghi'在多行內| | | '片段。你看到不同的東西嗎? – ruakh

+0

就是你!謝謝。 –