2014-01-24 3 views
0

내가 정규식과 장난 해요하지만 난 어떤 프로를 의미하며 나는 아주이 제대로 동작하지 않습니다에 의해 해요 http://www.regexr.com/ (서두르는 것은 도움이되지 않습니다.)정규식 : 스타일에 주석을 제외하고 모든 일치 : // 또는 (* ... *)

저는 기본적으로 C 구문과 비슷한 것으로 보이는 PLC 코드가 2 개 있습니다. 그래서 모든 코멘트는 // 또는 (* ... *)입니다.

번역자이고 메모 만 번역해야하기 때문에 메모장에서 찾기/바꾸기를 사용하는 것이 좋습니다. 주석이 아니 었습니다. 공백으로 대체하십시오. 결국, 주석 만있는 문서를 갖기 위해서입니다. 그래서 내가 그 사람을 삭제하고 싶지 않아 아무것과 함께 "대체"수 없기 때문에 코멘트와 일치 RegEx와 함께 할 수 있을지 모르겠다 ... 어떤 의미가 ???

도와 주셔서 감사합니다 순전히!

+0

사용중인 언어는 무엇입니까? –

답변

0

간단한 대답

:

^\/\/.*$


이것은 *와 * 사이에 아무것도 일치합니다

당신이 요구 한 것이 아니지만 이것이 당신이하고 싶은 일이라고 생각합니다. 당신이 필요로하는 것은 주석을 잡아서 제거하는 것뿐입니다.

~(?<!\\)//[^\n\r]*|(?<!\\)\(\*.*?(?<!\\)\*\)~sg 

(* *) 안에 모든 라인에 // 다음 텍스트 및 모든 텍스트 (멀티)을 선택합니다 : 그렇게합니다. 그 후에 모든 선택을 빈 문자열 ""으로 바꿔야합니다. 정보에 대한

, (?<!) 패턴 뒤에 보면된다 : 그들은 주석의 한계가 탈출하지 있는지 확인 드리겠습니다. \//I wanna keep this codecode (*foo\*)bar*)(*foo\*)bar*)를 선택해야합니다, 일치 할 수 없습니다.

미친 잔인한 기록을 위해

하고, 간단한 명백한 답이있을 때 괴물 정규식 갈 너무 지독한 유혹 때문에,하기 때문에 [사용해서는 안]을 나는 것을보고하지 않았다

너무 길기 전에 ... 이 아니어야합니다.

~(?:^//.*$|\(\*.*?\*\)|([^(\n]+)|(\())~mg 

는 당신이 변수 \1\2에서 원하는 것을 잡을 수 있습니다.

\(\*.*?\*\) (당신은 또한 cool code //this was cool code을 닮은 줄에 // 전에 코드를 잡으려고 할 수도 있지만) //로 시작

^//.*$ 캐치 라인 (* *) 사이에 아무 것도 (줄 바꿈 거기에 있지 않은 경우지만 ... 당신은 할 수 잡는다 정규 표현식이 지원한다면 (?s:\(\*.*?\*\))을 사용하십시오.그리고 속도 최적화가되지 않은 것 같습니다.)

([^(\n]+])은 여는 괄호가 아닌 항목을 찾아서 선택합니다. 즉, 주석을 사용하지 않은 여러 줄의 코드는 줄 바꿈됩니다. (?s:((?:(?!\n/|\().)+)) 같은 것으로이 동작을 변경할 수 있습니다.

(\()(* 주석의 시작이 아닐 경우에만 이전 패턴을 중단시킨 열린 괄호와 일치합니다.

여기에서 실제로 볼 수 있습니다 : http://regex101.com/r/aX6sF7하지만 크게 단순화 될 수 있습니다.

+0

안녕하세요, 로빈, 도와 줘서 고마워. 실제로 "사용해서는 안되는" "미친 잔인 함"은 기본적으로 제가 말할 수있는 한 내가 찾는 것에 더 가깝습니다. 나는 내 코드로 링크를 테스트했으며, 문장의 시작 부분에있는 // 부분을 제외하고는 꽤 잘 작동한다. (예 : 탭을 처음 또는 같은 줄의 코드 뒤에) ...... 제안 사항이 있습니까? – Zingapuro

+0

글쎄, 어쨌든 도움이 되었기 때문에 기쁩니다 :) 코멘트가없는 코드를 원한다면 첫 번째 해결책은 더 간단하고 아마도 안전합니다 : 주석을 선택하고 코드 만 남기고 제거하기 때문에 사용하면 안된다고했습니다. 그게 네가 원하는거야? "foo \ (* bar *)만이'foo \'만 선택했을 것입니다.) 그리고 이중 슬래시가 매우 깔린 경우에만 코멘트 라인을 처리합니다. 처음. 그리고 가장 중요한 것은, 그것은 전혀 우아하지 않다고 생각합니다 :/1 시간 30 분이 적당하지 않은 이유를 말해 준다면 몇 시간 안에 살펴볼 것입니다. – Robin

0

이것은 //로 시작하는 라인을 일치합니다 :

\*[^\*]*\*