2013-10-05 4 views
2

단어 쌍을 선택적으로 찾으려면 VIM 정규 표현식을 원합니다. 단어는 다른 단어로 구분할 수 있지만 둘 다 같은 줄에 있어야합니다.gvim 정규식 일치하는 단어 쌍

open foo close 
open close 
foo 

을하고이 일치하지해야합니다 : 다음 개폐에 맞게 원하는 경우 예를 들어, 다음은 일치해야합니다 나는 단어를 일치 내다을 사용 lookbehind 위해 노력했다

open foo 
open 
foo close 
close 

하지만, 나는 올바른 조합을 찾을 수없는 것 같습니다.

나는 단일 문자에 대해이를 수행하는 방법을 알고 있지만 단어는 완전히 잃어 버렸습니다. 여기

는 시도이다 :

s/^\(a[^ac]*c\|[^ac]\)*$ 

이 : 같은 것을 들어 있지만 'A'와 대신의 'C'와

s/\(\(open\)\@=.*\(close\)\@=\)* 

나는이 작업을 수행 할 수있는 '개방'과 '가까운' 이 라인 (그리고 빈 줄) 모두 선택합니다 :

acabcacabbbbcbbb 
ac 
abc 
b 

을하지만

을 선택하지 않을
acbbc 
ab 
bc 
a 
c 

이것은 내가 찾고자하는 기능이지만 단어가 있습니다.

도움을 주시면 감사하겠습니다.

감사합니다. Nachum

편집 : 나는 들여 쓰기 스크립트에서 작업하고 있는데, 이것이 도움이되었을 것입니다. 대신, 나는 한 단어로 단어를 검색하고 변환하는 것을 끝내었다. 그런 다음 이미 익숙한 방법을 사용하여 단일 문자를 찾습니다. 첫 번째 변환이 완료되면 코드가 짧아집니다.

+2

완벽하게 작동하지 않더라도 최선의 노력을 기울여야합니다. 이것은 사람들이 당신이하려고했던 것을보고 당신이 뭘 잘못하고 있는지 알려주는 데 도움이 될 것입니다 ... 또한 사람들은 당신이 스스로 문제를 해결하려고 시도했다는 증거를보고 싶어합니다. – smerny

+0

내 시도로 업데이트되었습니다. 그 점을 지적 해 주셔서 감사합니다. – nachum

답변

2

그냥이 검색 :

open.*close 
+0

이것은 "foo"(열거 나 닫지 않은 행)와 일치 할 OP 표현과 일치하지 않습니다. – smerny

0

나는 이것이 당신이 찾고있는 것을 믿습니다. 아래

^((?!.*open|.*close).*|.*open.*close.*)$ 

휴식 - 아무것도 개폐
또는
.*open.*close.* 제외 -

(?!.*open|.*close).* 내가 정력에 익숙하지있어 개방적이고 가까운

모두 포함 뭔가를하지만, 당신이 보여준 것에서 나는 당신이 구문을 바꿀 수있는 것처럼 보였다고 생각합니다.