아하
  • 토픽

  • 스파링

  • 잉크

  • 미션


굳센푸들132

굳센푸들132

vim에서 정규표현식 사용할때 패턴이 맞지 않는다고 합니다.

일단 저는 vim과 정규표현식에 있어서 뉴비입니다.

아무튼 지금 할려고 하는게 vim에서 문자 치환을 하는 걸 할려고 하는데

vim에서 정규표현식이 된다고 해서 쓸려고 하는데 잘 안되서 질문 올립니다.

아무튼 여기 이런 예문에서 글자 수가 5개인 단어를 치환할려고 할 때 정규표현식을 이용 할려고 하는데

regexr.com에서는 일단 작동은 해서 될꺼라고 생각했는데

이렇게 맞지 않는다고 되는데 혹시 제가 놓친부분이나 틀린 부분이 있나요?

찾아주시면 정말 감사하겠습니다.

3개의 답변이 있어요!

  • 근면한강아지114

    근면한강아지114

    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 등 하나의 정규식을 잘 사용하신다면

    다른 정규식은 잠깐의 검색으로 커버가 되실꺼에요 안된다고 걱정 안 하셔도 될 것 같습니다.