간단한 대답
:
^\/\/.*$
이것은 *와 * 사이에 아무것도 일치합니다
당신이 요구 한 것이 아니지만 이것이 당신이하고 싶은 일이라고 생각합니다. 당신이 필요로하는 것은 주석을 잡아서 제거하는 것뿐입니다.
~(?<!\\)//[^\n\r]*|(?<!\\)\(\*.*?(?<!\\)\*\)~sg
이 (* *)
안에 모든 라인에 //
다음 텍스트 및 모든 텍스트 (멀티)을 선택합니다 : 그렇게합니다. 그 후에 모든 선택을 빈 문자열 ""
으로 바꿔야합니다. 정보에 대한
, (?<!)
패턴 뒤에 보면된다 : 그들은 주석의 한계가 탈출하지 있는지 확인 드리겠습니다. \//I wanna keep this code
는 code (*foo\*)bar*)
이 (*foo\*)bar*)
를 선택해야합니다, 일치 할 수 없습니다.
는
미친 잔인한 기록을 위해
하고, 간단한 명백한 답이있을 때 괴물 정규식 갈 너무 지독한 유혹 때문에,하기 때문에 [사용해서는 안]을 나는 것을보고하지 않았다
너무 길기 전에 ... 은이 아니어야합니다.
~(?:^//.*$|\(\*.*?\*\)|([^(\n]+)|(\())~mg
는 당신이 변수 \1
및 \2
에서 원하는 것을 잡을 수 있습니다.
\(\*.*?\*\)
(당신은 또한 cool code //this was cool code
을 닮은 줄에 //
전에 코드를 잡으려고 할 수도 있지만) //
로 시작
^//.*$
캐치 라인 (* *)
사이에 아무 것도 (줄 바꿈 거기에 있지 않은 경우지만 ... 당신은 할 수 잡는다 정규 표현식이 지원한다면 (?s:\(\*.*?\*\))
을 사용하십시오.그리고 속도 최적화가되지 않은 것 같습니다.)
([^(\n]+])
은 여는 괄호가 아닌 항목을 찾아서 선택합니다. 즉, 주석을 사용하지 않은 여러 줄의 코드는 줄 바꿈됩니다. (?s:((?:(?!\n/|\().)+))
같은 것으로이 동작을 변경할 수 있습니다.
(\()
은 (*
주석의 시작이 아닐 경우에만 이전 패턴을 중단시킨 열린 괄호와 일치합니다.
여기에서 실제로 볼 수 있습니다 : http://regex101.com/r/aX6sF7하지만 크게 단순화 될 수 있습니다.
사용중인 언어는 무엇입니까? –