새소식

사용팁/editor & ide

[notepad++] 정규식(regex) 간단 정리

  • -

notepad++ (노트패드 플러스 플러스, 이하 npp)는 Don Ho 님이 만들고 있고 https://notepad-plus-plus.org/ 에서 배포하고 있습니다.

 

위 그림은 Ctrl + H 를 누르면 나오는 바꾸기 창(메뉴에서는 찾기->바꾸기 선택, 아이콘에서는 망원경 옆 ba 가 써진 버튼 선택)입니다.

 

여기에서 사용되는 정규식을 생각나는 대로 정리하도록 하겠습니다.


당연하게도(?) 그냥 글자(영어, 한글 등등)를 입력하면 그대로 찾아줍니다.
하지만 이렇게 찾으면 뭉뚱그리거나 어떤 규칙성을 갖는 문자열을 찾기에는 아쉽죠.

vim 을 오래 쓰신다면 익숙해지게 되시는 정규식을 npp 에서도 쓸 수 있습니다.

 

위 바꾸기 창에서(찾기 창에서도 사용 가능합니다) '찾기 모드' 그룹에 보통 '일반'이 선택되어 있는데 '정규 표현식'을 선택하고 이제 찾을 내용 또는 바꿀 내용에 정규식을 입력하면 됩니다.

 

다만, vim 에서 사용되는 정규식과 미묘하게 다릅니다. grep 에서 사용되는 정규식하고도 다르죠.
대략적으로 기본 정규식(BRE), 확장 정규식(ERE), 펄 호환 정규식(PCRE) 으로 나뉩니다.(GNU 버전만의 특징도 있지만 생략..).

대충 특징 써보면..

BRE : 특수기능을 하는 문자는 back slush \ 로 시작합니다
ERE : 특수기능을 하는 문자를 그대로 쓴다. 추가 표현식 제공 - ( ? + {m,n} | ()  등의 연산자 포함 )

PCRE : lookaround(둘러본다라는 말로 찾을 패턴 주변도 확인) 기능, lazy modifier(필요한 만큼의 최소한의 매치) 등의 기능 제공.

GNU 버전 : \W \s 등의 단축 명령 제공

대에추웅 지원하는 기능이 PCRE > ERE > BRE 이렇게 된다고 보면 될 듯...

 

자세한 내용은 이 글을 참고하시기 바랍니다.(영문이므로 해석하기 귀찮으신 분들은 chatgpt 에게 번역해달라고 하세요)

더보기

※ ERE 에서 non-greedy(lazy modifier) 기능 흉내내기

echo "goooo" | grep -E 'g[^0]*?'
위와 같이 명령 내리면 g로 시작하고 o 가 뒤따르는 문자열을 찾아 g 만 찾아줌

  • 범위 중 1글자 : [범위패턴]
    • A 부터 Z 까지 영어 대문자 1글자 - [A-Z]
    • 위 내용 1글자 이상 : [A-Z]+
    • 위 내용을 메모리에 저장 : ([A-Z]+)
  • 저장한 내용 바꾸기 칸에서 호출 : \1 \2 \3 저장한 순수대로 번호 매겨서 호출
  • 아무 1글자 : .
  • 아무 1글자이거나 없거나 : ?
  • 최소 일치 : *? abcdefc 가 원문일 때 a.*c 는 abcdefc를, a.*?c 는 abc 를 돌려줌. 없을 수도 있음.
  • 최소 일치 : +? 위와 동일하나 최소 1번은 나와야 함.
  • 반복
    • {N} - N회 반복, {N,} - N회 이상 반복, {N,P} N회 이상 P회 이하 반복
    • {N,}? {N,P}? - 위와 동일하지만 최소 반복
  • 문자값을 사용한 1글자
    • 유니코드 등 특수문자 \x{0304} \{문자 코드값} 형태로 기술
    • 아스키코드 문자 - ascii 코드표 참고
      • 8진수 표현법(octal)
        • \0255 와같이 표현 참고로 첫글자 숫자 0임.
      • 16진수 표현법(hexa)
        • 1바이트
          • \xFF 와 같이 표현.
        • 2바이트
          • \x{0123} 과 같이 중괄호로 묶음.
    • 유니코드문자
      • \x{0123}\x{4567}
      • U+1F682 란 글자는 \x{D83D}\x{DE82} 로 표현된다 함. surrogate code 로 검색해서 변환해야 함.
        • U+PPWXYZ 라고 표현될 때의 의미가 있어서 변환이 필요.
        • 자세한 내용은 이 글 참고
    • 조합 문자
      • 스페인어의  ch 는 단일 문자임. 이런 것들 표시
      • [[.ch.]] [[.BEL.]]
    • 제어 문자
      • \a \b \e \f \n \r \t \cX X는 영문자. Ctrl 키와 함께 누르는 키 입력을 가리킴
    • 특수 제어 문자
      • \R : 모든 종류의 개행문자
      • \< : 단어의 왼쪽 끝
      • \> : 단어의 오른쪽 끝
      • \b : 단어의 왼쪽 또는 오른쪽 끝
      • \B : \b의 반대. 단어의 끝이 아님
      • \A 또는 \` : 파일 시작
      • \z 또는 \' : 파일 끝
    • GNU 버전 표현식
      • [[:name:]] 유니코드문자 쪽 참고 글 참고
    • 대응 클래스 (equivalence class)
      • [[=영문자=]] [[=a=]] -> A, À, Á, Â, Ã, Ä, Å, a, à, á, â, ã, ä, å
  • 정규식에서 특수하게 해석되는 문자를 일반 문자처럼 찾고 싶은 경우: 문자 앞에 \ 붙이기. \$ -> $ 를 찾음. \. -> . 을 찾음
  • 한 줄의 끝을 나타낼 때 : $  abc$ -> 줄 끝이 abc 로 끝나는 패턴
  • 한 줄의 시작을 나타낼 때 : ^ ^abc -> 줄 시작이 abc 로 시작하는 패턴
  • [] 로 나타난 내용을 포함하지 않는 경우(부정) : [^A-Z] A부터 Z까지의 문자가 들어 있으면 안됨
  • 이거 아니면 저거 or 연산 : (abc | def) -> 보통 괄호로 둘러쌈. abc 이거나 def 인 경우임.
  • 0번 이상 반복 : [A-Z]* -> A부터 Z까지의 대문자가 아예 안나오거나(0번) 1번 이상 계속 나오는 경우.
  • 1번 이상 반복 : [A-Z[+ -> A부터 Z까지의 대문자가  반드시 1번 이상 계속 나오는 경우 

나머지는 추후 정리...

참고 글 : https://npp-user-manual.org/docs/searching/#regular-expressions

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.