생활
vim에서 정규표현식 사용할때 패턴이 맞지 않는다고 합니다.
일단 저는 vim과 정규표현식에 있어서 뉴비입니다.
아무튼 지금 할려고 하는게 vim에서 문자 치환을 하는 걸 할려고 하는데
vim에서 정규표현식이 된다고 해서 쓸려고 하는데 잘 안되서 질문 올립니다.
아무튼 여기 이런 예문에서 글자 수가 5개인 단어를 치환할려고 할 때 정규표현식을 이용 할려고 하는데
regexr.com에서는 일단 작동은 해서 될꺼라고 생각했는데
이렇게 맞지 않는다고 되는데 혹시 제가 놓친부분이나 틀린 부분이 있나요?
찾아주시면 정말 감사하겠습니다.
3개의 답변이 있어요!
Regular Expression 에 대한 정의는 하나이지만,
에디터 툴마다 조금씩 다르게 적용되는 부분이 있습니다.
첫째 escape 해야하는 문자가 다르고, 둘째 참조를 위한 특수문자가 다른 경우가 있습니다.
Vim 에서 치환을 위해 Regular Expression 을 사용할 때 escape 가 필요한 경우는 아래와 같습니다.
https://jeetblogs.org/post/vim-regular-expression-special-characters-to-escape-or-not-to-escape/
우선 질문자의 표현식을 좀 더 다듬어 보자면,
\S 에 [ ] 중괄호를 붙인 부분은 불필요해 보이네요.
여러가지 문자를 나열하기 위해 사용하는데, \S 하나뿐이니까요.
그리고 {5,5} 는 {5} 로 바꿔도 되겠네요.
최소 5개 최대 5개는 결국 5개라는 말이니까요.
그래서 최종적으로 \b\S{5}\b 이렇게 간소하게 표현해도 되겠구요,
escape 는 위 URL 을 살펴보시면 대괄호 시작문자에 붙여야 한다는 군요.
그렇다면, \b\S\{5}\b 이렇게 표현하시면 Vim 에디터에서 원하는 결과를 얻을 수 있습니다.
- %s/\S\{5}/world/gc
- %s/...../world/gc
word boundary + "\{" 때문인거 같은데, VIM search tips 같은 Page를 보시고 최대한 간결하게 만드시는것이? ^^
regex는 자주 쓸법한 패턴은 최대한 간결하게 만들어둬야 외워져서 쉽게 쓰게되더라구요 ㅋ
regexr.com 을 보시면 아래와 같이 명시 되어 있습니다.
Supports JavaScript & PHP/PCRE RegEx. -> PCRE의 정규식을 지원한다
이 말은 vim의 정규식과는 문법적으로 차이가 있다는 이야기 입니다.
정규식 별 문법의 차이는 아래 사이트를 참고 하시면 잘 정리되어 있습니다.
https://remram44.github.io/regex-cheatsheet/regex.html
(\b[\S]{5,5}\b) -> \<\S\{5,5\}\>
사용하신 패턴을 위와 같이 변경해보세요 잘 검색 될 껍니다.
아래는 미세하게 차이나는 문법에 대한 간략한 설명 입니다.
단어의 시작과 종료를 알리는 \b는 vim 에서는 아래와 같이 사용합니다.
시작 : \<
종료 : \>
그리고 반복을 표현하는 문법도 미세하게 차이가 납니다.
{5,5} -> {5,5\}
pcre, vim, posix 등 하나의 정규식을 잘 사용하신다면
다른 정규식은 잠깐의 검색으로 커버가 되실꺼에요 안된다고 걱정 안 하셔도 될 것 같습니다.