Visual Studio에서 여러 줄에 걸쳐 정규식 바꾸기를 수행하도록하는 방법이 있습니까 (선 경계를 일치 시키도록 함)? 이를 위해 사용할 수있는 편집기가 많이 있다는 것을 알고 있지만이 기능이 Visual Studio에서 제외 된 것이 이상해 보입니다. 내가 뭔가를 놓치고 있습니까?
답변:
파일 대화 상자에서 대체 사용 Ctrl- Shift- H와 한 줄 옵션 (?s)
:
(?s)start.*end
발견
start
two
three
end
단일 행은 각 파일이 단일 행으로 처리되고 점 .
은 개행 문자와 일치 함을 의미합니다 \n
. 단점 : 모두 찾기 를 사용 하여 모두 교체하거나 손으로 교체 해야합니다 . 다음 찾기가 작동하지 않습니다.
비 모달 대화 상자의 경우 Ctrl- H다음 찾기를 사용 (.*\n)*
하여 원하는 수의 행을 일치 시킵니다 .
start(.*\n)*.*end
어느 쪽이든 삽입하여 결과를 여러 줄로 바꿀 수 있습니다 \n
.
start
하고 end
. 바로 다음 end
버전 을 찾으려면 탐욕스럽지 않은 버전 : (?s)start.*?end
또는 start(.*\n)*?.*?end
.
(?s)
있습니까?
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이고 .*
가능한 탭 / 공간을 일치하는
이것은 현재 Visual Studio 2012에서 작동합니다.
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
(.*\n)+?
탐욕스럽지 않은 여러 줄 에서 부품이 어떻게 일치 하는지 확인하십시오 .
fooPatternToStart
시작 줄에 정규식 패턴 barPatternToEnd
이 있고 패턴은 아래 다른 줄에서 찾을 수 있습니다.
간단하고 효과적인 :)
참고 : VS2012 이전 에는 다음과 같은 패턴이 작동했습니다.fooPatternToStart.(.\n)+@.*barPatternToEnd
sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__
를 검색합니다 . 감사합니다! Tho .. 그것은 그것을 위해 무한대로 보는 것 같다 .. 라인의 양을 제한하는 방법이 있다면log
sprintf
__func__
참고 :이 답변은 VS 2012까지 Visual Studio에서 사용되는 정규식 구문을 사용합니다. VS 2013 이상에서는 정규식 구문이 변경되었습니다.
\n
표현식에 포함 할 수 있습니다 . 예를 들어, 여기에 저장 프로 시저가 아닌 모든 것에서 자동 생성 된 SQL 스크립트를 "정리"하는 데 사용하는 정규식이 있습니다 ( "Object :"가 포함 된 줄로 시작하는 텍스트 블록과 일치하지 않는 항목이 뒤 따르는 텍스트 블록과 일치합니다. "StoredProcedure", 다음 줄을 한 줄까지 일치 시키면 단어 "GO"로 구성됨) :
/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
end
)를 원하므로 욕심이 없습니다. ie :start(.*\n)*.*?end