
특정 패턴이 포함된 모든 줄을 표시하는 방법을 찾고 싶지만 이웃(이전, 다음) 줄은 표시되지 않습니다.
예: 패턴이 "PATTERN"이라는 단어라고 가정해 보겠습니다.
1.#########################
2.#########패턴#########
삼.##############################
그러면 두 번째 줄이 유효하고 표시됩니다.
하지만
1.#########################
2.#########패턴#########
3.#########패턴#########
4.#############################
두 번째와 세 번째 줄은 유효하지 않으므로 표시되지 않습니다.
답변1
다음과 같이 정규식 캡처 그룹을 사용하고 싶을 것입니다.
/\v%(PATTERN.*\n.*)@<!(PATTERN)%(.*\n.*\1)@!
무섭게 보일 수도 있지만 실제로는 매우 간단합니다.
\v
활성화하는 데 사용됩니다."아주 마법같아"정규식(대부분의 특수 문자에 백슬래시 사용 방지)PATTERN.*\n.*
isPATTERN
, 그 뒤에 아무 것, 개행 문자, 그리고 다시 아무 것도 옵니다.(...)@<!
부정적인 뒤돌아보기의 패턴입니다. 이는 우리가원하지 않는다존재하는 중괄호 사이에 무엇이 있습니까? 따라서 우리의 경우 모든 단계가2
존재해서는 안 됩니다.(PATTERN)
이것이 우리의 실제 단어입니다. 이것이 존재해야 합니다! 향후 사용을 위해 중괄호로 캡처합니다..*\n.*\1
무엇이든, 개행 문자, 다시 무엇이든, 캡처된 그룹(단계 참조4
)%(...)@!
이전과 마찬가지로 부정적인 예측이므로 중괄호 사이에 있는 내용이 존재하는 것을 원하지 않습니다.
따라서 기본적으로 우리는 PATTERN
다음을 원합니다.
- 다음을 포함하는 줄이 앞에 오지 않음
PATTERN
- 다음을 포함하는 줄이 성공하지 못했습니다.
PATTERN