2012-10-05 3 views
2

줄 끝 주석을 제거하려면 Perl 정규식이 필요합니다. 나는 이것에 대해 주위를 인터넷으로 봤고, 옳은 것을 찾을 수 없었던 것처럼 느낀다. 여기에 세부 사항은 다음과 같습니다따옴표가없는 한 행 끝의 주석을 제거하십시오.

EOL의 코멘트 (#) 파운드 기호를 사용하여 표시됩니다

무엇이든은 수직 막대 사용하여 인용 할 수있다 | 그래서 다음과 같은 코멘트가

을() :

foo bar #baz 

그러나 다음과 같은하지 않습니다 :

foo |quoted###with bars| 

다음은 COMME있다 NT 및 주석 문자가 포함 된 견적 :

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

내가 시도 우선은 s/#(?=[^|]*$).*$//이었다, 불행하게도 파운드를 인용 제거합니다. 그것은 다음과 같은 여러 따옴표에 실패하기 때문에 작동하지 않습니다 다음 것은, /#(?=[^|]*$).*$//입니다 :

내가 perlfaq6에서 C/C++ 주석에 대한 정규식에서 뭔가를 수집합니다 할 수 있습니다 같은 느낌
foo |quote begins here ##still going 
     ##and it's still going| #this is a quote, though. 

, 그러나 그것은 내가 필요로하는 것들을 움켜 잡기에는 너무 복잡하다 (여러 줄로 된 주석을 필요로하지 않는다).

누구든지 EOL 주석을 제거하지만 인용 된 주석 문자는 무시할 수있는 정규식을 제공 할 수 있습니까?

답변

2

한 가지 방법은 :

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

|...|은 아무것도 자체, 그리고 #... (|...#...| 포함) 대체합니다.

+0

거의 ... 여러 줄의 것을 다루지 않습니다. –

+0

@NateGlenn : 물론 그렇습니다. 너 시도 했니? '# ghi'가 여러 줄의'|| | '안에 있기 때문에'abc | def # ghi'와 개행에 플러스'klm | nop # qrs'을 시도해 보았을 때'# qrs'를 벗겨 냈을뿐입니다. '조각. 당신은 다른 것을보고 있습니까? – ruakh

+0

바로 당신입니다! 감사. –

관련 문제