Visual Studio의 여러 줄 정규식


87

Visual Studio에서 여러 줄에 걸쳐 정규식 바꾸기를 수행하도록하는 방법이 있습니까 (선 경계를 일치 시키도록 함)? 이를 위해 사용할 수있는 편집기가 많이 있다는 것을 알고 있지만이 기능이 Visual Studio에서 제외 된 것이 이상해 보입니다. 내가 뭔가를 놓치고 있습니까?

답변:


25

파일 대화 상자에서 대체 사용 Ctrl- Shift- H와 한 줄 옵션 (?s):

(?s)start.*end

발견

start
two
three
end

단일 행은 각 파일이 단일 행으로 처리되고 점 .은 개행 문자와 일치 함을 의미합니다 \n. 단점 : 모두 찾기 를 사용 하여 모두 교체하거나 손으로 교체 해야합니다 . 다음 찾기가 작동하지 않습니다.

비 모달 대화 상자의 경우 Ctrl- H다음 찾기를 사용 (.*\n)*하여 원하는 수의 행을 일치 시킵니다 .

start(.*\n)*.*end

어느 쪽이든 삽입하여 결과를 여러 줄로 바꿀 수 있습니다 \n.


이것은 작동하지만 추가 물음표 (이전 end)를 원하므로 욕심이 없습니다. ie :start(.*\n)*.*?end
CAD bloke

4
욕심 버전은 가능한 한 사이 많은 문자로 일치 start하고 end. 바로 다음 end버전 을 찾으려면 탐욕스럽지 않은 버전 : (?s)start.*?end또는 start(.*\n)*?.*?end.
Stephan Stamm

예상 사용자 참고 사항 : Visual Studio 2013 이후로 작동하지 않습니다. Giles Roberts의 답변을 참조하십시오.
relatively_random

@relatively_random : 사용하는 데 문제가 (?s)있습니까?
Stephan Stamm

응 나는 했어. 최신 VS 버전에서 여전히 작동합니까?
relative_random

72

Visual Studio 2013 에서는 정규식이 변경되었습니다 . https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx

두 줄에 걸쳐 표현식을 일치 시키려면 이제 코드는 다음과 같습니다.

StartOfExpression.*\r?\n.*EndOfExpression


이, 완벽하게 작동 감사 </label>.*\r?\n.*<div\r?\n명백한 carriage_return-NEW_LINE이고 .*가능한 탭 / 공간을 일치하는

"리터럴 '\ n'은 현재 지원되지 않습니다."라는 오류
메시지가 나타납니다.

@ ELI7VH 오류를 복제 할 수 없습니다. 어떤 버전의 Visual Studio를 사용하고 있습니까?
Giles Roberts

25

이것은 현재 Visual Studio 2012에서 작동합니다.

fooPatternToStart.*(.*\n)+?.*barPatternToEnd

(.*\n)+?탐욕스럽지 않은 여러 줄 에서 부품이 어떻게 일치 하는지 확인하십시오 .
fooPatternToStart시작 줄에 정규식 패턴 barPatternToEnd이 있고 패턴은 아래 다른 줄에서 찾을 수 있습니다.

여기에 예제가 있습니다 .

간단하고 효과적인 :)

참고 : VS2012 이전 에는 다음과 같은 패턴이 작동했습니다.fooPatternToStart.(.\n)+@.*barPatternToEnd


4
Visual Studio 2012는 코드 내에서 찾기 / 바꾸기에 동일한 정규식 엔진을 사용하므로 위는 다음과 같습니다. fooPatternToStart. * (. * \ n) *?. * barPatternToEnd
Brent

@Brent : 당연히 VSTO의 최신 버전이이 문제를 해결했습니다.
woohoo

시작과 중지 사이에 특별히 텍스트를 검색하려면 어떻게해야합니까? 이렇게? : 편집 : 과 사이 sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__를 검색합니다 . 감사합니다! Tho .. 그것은 그것을 위해 무한대로 보는 것 같다 .. 라인의 양을 제한하는 방법이 있다면logsprintf__func__
Gizmo

19

참고 :이 답변은 VS 2012까지 Visual Studio에서 사용되는 정규식 구문을 사용합니다. VS 2013 이상에서는 정규식 구문이 변경되었습니다.

\n표현식에 포함 할 수 있습니다 . 예를 들어, 여기에 저장 프로 시저가 아닌 모든 것에서 자동 생성 된 SQL 스크립트를 "정리"하는 데 사용하는 정규식이 있습니다 ( "Object :"가 포함 된 줄로 시작하는 텍스트 블록과 일치하지 않는 항목이 뒤 따르는 텍스트 블록과 일치합니다. "StoredProcedure", 다음 줄을 한 줄까지 일치 시키면 단어 "GO"로 구성됨) :

/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n

참고 : 줄 종결자는 파일 형식에 따라 다르므로 Unix 스타일 텍스트에는 \ n, Mac 스타일 텍스트에는 \ r, Windows 스타일 텍스트에는 \ r \ n 만 사용하십시오.
James Wilkins 2014 년

2
참고 II : "전체 단어 일치"를 동시에 선택하지 않았는지 확인하십시오. 그렇지 않으면 작동하지 않습니다!
Ed Graham

1
이 답변은 Visual Studio 2012 및 이전 버전에만 적용된다는 메모를 추가 할 수 있습니까?
Giles Roberts

3

표현식 끝에 \ r \ n을 사용해야 할 수도 있습니다.


1

탐욕스럽지 않은 여러 줄 문자 캡처, Visual Studio 2013+ :

.*?\r?\n.*?

Giles Roberts의 대답에서 욕심 많은 버전.


0

VS Code를 검색하는 동안 여기에 오는 모든 사람들을 위해, 나는 이것을 사용 script하여 2 개의 줄 바꿈 (줄 바꿈 제외)으로 어디서나 일치 시킵니다.

script(.|\n)+?(?=\n\n)

교체 script하고 \n\n그들 사이의 모든 것을 일치시킵니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.