난 당신이 한 번에 원하는 것을 할 수있는 우아한 정규식을 찾을 수 없습니다,하지만 당신은 할 수 있습니다 :
이
IF @RetValue = 'Cat'
/*SET @RetValue = 'WrongLocation
and it works here' */
------testing line
SET @Dude = 'Punto'
/* comments */
-- But it doesn't work here because inside comments!
-- and this is aren't the end
SET @RetValue = 'But this should
work here'
올바른 일치 만이 반환해야 그것은 두 단계로 이루어집니다.
string commentFree = Regex.Replace(sourceString, @"\/\*.*?\*\/|\-\-[^\n]*\n", string.Empty, RegexOptions.Multiline | RegexOptions.Singleline);
지금 당신은 당신의 분야를 추출 commentFree에 정규식 '[^']*'
를 실행할 수 있습니다.
'[^']*'
은 RegEx 엔진을 역 추적 할 필요가 없기 때문에 '.*?'
보다 더 효율적입니다. 이제는 시작 인용문을 찾고, 인용문이 아닌 모든 문자에 대해 계속하고 끝 인용문으로 끝냅니다. 위의 기술을 사용하여 --
의 줄 끝에서 \n
끝까지 주석을 가져옵니다.
편집 : 다른 방법으로, 당신은 (주석 내에 있지 않은) 모든 의견과 견적 블록을 일치하는 패턴 \/\*.*?\*\/|\-\-[^\n]*\n|'[^']*'
을 사용할 수 있으며, 다음 만의 의지로, 그 결과를 반복 할 때 '
로 시작하는 일치를 사용 견적 블록이되어야합니다.
내가 제공 한 패턴이 예를 들어 예상대로 작동하지 않아서 여전히 데이터 처리가 더 필요하므로 주석을 공백으로 대체하는 데 어려움이 있습니다. 이것은 현재로서는 가장 좋은 해결책입니다. 지금은 더 나은 다른 패턴을 제공했고, 가지고있는 패턴에는 몇 가지 문제가 있습니다. – btomas