Quantcast
Channel: sr's lair
Viewing all articles
Browse latest Browse all 687

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

$
0
0
<p data-ke-size="size16">notepad++ (노트패드 플러스 플러스, 이하 npp)는 <a href="https://github.com/donho" target="_blank" rel="noopener">Don Ho</a> 님이 만들고 있고 <a href="https://notepad-plus-plus.org/" target="_blank" rel="noopener noreferrer">https://notepad-plus-plus.org/</a> 에서 배포하고 있습니다.</p> <p><figure class="imageblock alignLeft" data-ke-mobileStyle="widthOrigin" data-origin-width="600" data-origin-height="357"><span data-url="https://blog.kakaocdn.net/dn/JIK0m/btsFJ6yNmJL/8ZCmqiT6cFwyuECFFydKC1/img.png" data-lightbox="lightbox"><img src="https://blog.kakaocdn.net/dn/JIK0m/btsFJ6yNmJL/8ZCmqiT6cFwyuECFFydKC1/img.png" srcset="https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJIK0m%2FbtsFJ6yNmJL%2F8ZCmqiT6cFwyuECFFydKC1%2Fimg.png" onerror="this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';" data-origin-width="600" data-origin-height="357"/></span></figure> </p> <p data-ke-size="size16"> </p> <p data-ke-size="size16">위 그림은 Ctrl + H 를 누르면 나오는 바꾸기 창(메뉴에서는 찾기->바꾸기 선택, 아이콘에서는 망원경 옆 ba 가 써진 버튼 선택)입니다.</p> <p data-ke-size="size16"> </p> <p data-ke-size="size16">여기에서 사용되는 정규식을 생각나는 대로 정리하도록 하겠습니다.</p> <hr contenteditable="false" data-ke-type="horizontalRule" data-ke-style="style5" /> <p data-ke-size="size16">당연하게도(?) 그냥 글자(영어, 한글 등등)를 입력하면 그대로 찾아줍니다.<br />하지만 이렇게 찾으면 뭉뚱그리거나 어떤 규칙성을 갖는 문자열을 찾기에는 아쉽죠.</p> <p data-ke-size="size16">vim 을 오래 쓰신다면 익숙해지게 되시는 정규식을 npp 에서도 쓸 수 있습니다.</p> <p data-ke-size="size16"> </p> <p data-ke-size="size16">위 바꾸기 창에서(찾기 창에서도 사용 가능합니다) '찾기 모드' 그룹에 보통 '일반'이 선택되어 있는데 '정규 표현식'을 선택하고 이제 찾을 내용 또는 바꿀 내용에 정규식을 입력하면 됩니다.</p> <p data-ke-size="size16"> </p> <p data-ke-size="size16">다만, vim 에서 사용되는 정규식과 미묘하게 다릅니다. grep 에서 사용되는 정규식하고도 다르죠.<br />대략적으로 기본 정규식(BRE), 확장 정규식(ERE), 펄 호환 정규식(PCRE) 으로 나뉩니다.(GNU 버전만의 특징도 있지만 생략..).<br /><br />대충 특징 써보면..</p> <p data-ke-size="size16">BRE : 특수기능을 하는 문자는 back slush \ 로 시작합니다<br />ERE : 특수기능을 하는 문자를 그대로 쓴다. 추가 표현식 제공 - ( ? + {m,n} | ()  등의 연산자 포함 )</p> <p data-ke-size="size16">PCRE : lookaround(둘러본다라는 말로 찾을 패턴 주변도 확인) 기능, lazy modifier(필요한 만큼의 최소한의 매치) 등의 기능 제공.</p> <p data-ke-size="size16">GNU 버전 : \W \s 등의 단축 명령 제공</p> <p data-ke-size="size16">대에추웅 지원하는 기능이 PCRE > ERE > BRE 이렇게 된다고 보면 될 듯...</p> <p data-ke-size="size16"> </p> <p data-ke-size="size16">자세한 내용은 <a href="https://www.baeldung.com/linux/bre-ere-pcre-syntax" target="_blank" rel="noopener">이 글</a>을 참고하시기 바랍니다.(영문이므로 해석하기 귀찮으신 분들은 chatgpt 에게 번역해달라고 하세요)</p> <div data-ke-type="moreLess" data-text-more="더보기" data-text-less="닫기"><a class="btn-toggle-moreless">더보기</a> <div class="moreless-content"> <p data-ke-size="size16">※ ERE 에서 non-greedy(lazy modifier) 기능 흉내내기</p> <p data-ke-size="size16">echo "goooo" | grep -E 'g[^0]*?'<br />위와 같이 명령 내리면 g로 시작하고 o 가 뒤따르는 문자열을 찾아 g 만 찾아줌</p> </div> </div> <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>범위 중 1글자 : [범위패턴] <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>A 부터 Z 까지 영어 대문자 1글자 - [A-Z]</li> <li>위 내용 1글자 이상 : [A-Z]+</li> <li>위 내용을 메모리에 저장 : ([A-Z]+)</li> </ul> </li> <li>저장한 내용 바꾸기 칸에서 호출 : \1 \2 \3 저장한 순수대로 번호 매겨서 호출</li> <li> <div data-ke-type="moreLess" data-text-more="더보기" data-text-less="닫기"><a class="btn-toggle-moreless">더보기</a> <div class="moreless-content"> <p data-ke-size="size16"> </p> <figure class="imageblock alignCenter" data-ke-mobileStyle="widthOrigin" data-origin-width="600" data-origin-height="357"><span data-url="https://blog.kakaocdn.net/dn/epk1xE/btsFJ7dQAoO/ooZcabP6RqUlXXMa9KVm30/img.png" data-lightbox="lightbox"><img src="https://blog.kakaocdn.net/dn/epk1xE/btsFJ7dQAoO/ooZcabP6RqUlXXMa9KVm30/img.png" srcset="https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fepk1xE%2FbtsFJ7dQAoO%2FooZcabP6RqUlXXMa9KVm30%2Fimg.png" onerror="this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';" data-origin-width="600" data-origin-height="357"/></span></figure> </div> </div> </li> <li>아무 1글자 : .</li> <li>아무 1글자이거나 없거나 : ?</li> <li>최소 일치 : *? abcdefc 가 원문일 때 a.*c 는 abcdefc를, a.*?c 는 abc 를 돌려줌. 없을 수도 있음.</li> <li>최소 일치 : +? 위와 동일하나 최소 1번은 나와야 함.</li> <li>반복 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>{N} - N회 반복, {N,} - N회 이상 반복, {N,P} N회 이상 P회 이하 반복</li> <li>{N,}? {N,P}? - 위와 동일하지만 최소 반복</li> </ul> </li> <li>문자값을 사용한 1글자 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>유니코드 등 특수문자 \x{0304} \{문자 코드값} 형태로 기술</li> <li>아스키코드 문자 - ascii 코드표 참고 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>8진수 표현법(octal) <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>\0255 와같이 표현 참고로 첫글자 숫자 0임.</li> </ul> </li> <li>16진수 표현법(hexa) <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>1바이트 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>\xFF 와 같이 표현.</li> </ul> </li> <li>2바이트 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>\x{0123} 과 같이 중괄호로 묶음.</li> </ul> </li> </ul> </li> </ul> </li> <li>유니코드문자 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>\x{0123}\x{4567}</li> <li>U+1F682 란 글자는 \x{D83D}\x{DE82} 로 표현된다 함. surrogate code 로 검색해서 변환해야 함. <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>U+PPWXYZ 라고 표현될 때의 의미가 있어서 변환이 필요.</li> <li>자세한 내용은 <a href="https://npp-user-manual.org/docs/searching/#regular-expressions#match-by-character-code" target="_blank" rel="noopener">이 글</a> 참고</li> </ul> </li> </ul> </li> <li>조합 문자 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>스페인어의  ch 는 단일 문자임. 이런 것들 표시</li> <li>[[.ch.]] [[.BEL.]]</li> </ul> </li> <li>제어 문자 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>\a \b \e \f \n \r \t \cX X는 영문자. Ctrl 키와 함께 누르는 키 입력을 가리킴</li> </ul> </li> <li>특수 제어 문자 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>\R : 모든 종류의 개행문자</li> <li>\< : 단어의 왼쪽 끝</li> <li>\> : 단어의 오른쪽 끝</li> <li>\b : 단어의 왼쪽 또는 오른쪽 끝</li> <li>\B : \b의 반대. 단어의 끝이 아님</li> <li>\A 또는 \` : 파일 시작</li> <li>\z 또는 \' : 파일 끝</li> </ul> </li> <li>GNU 버전 표현식 <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>[[:name:]] 유니코드문자 쪽 참고 글 참고</li> </ul> </li> <li>대응 클래스 (equivalence class) <ul style="list-style-type: disc;" data-ke-list-type="disc"> <li>[[=영문자=]] [[=a=]] -> A, À, Á, Â, Ã, Ä, Å, a, à, á, â, ã, ä, å</li> </ul> </li> </ul> </li> <li>정규식에서 특수하게 해석되는 문자를 일반 문자처럼 찾고 싶은 경우: 문자 앞에 \ 붙이기. \$ -> $ 를 찾음. \. -> . 을 찾음</li> <li>한 줄의 끝을 나타낼 때 : $  abc$ -> 줄 끝이 abc 로 끝나는 패턴</li> <li>한 줄의 시작을 나타낼 때 : ^ ^abc -> 줄 시작이 abc 로 시작하는 패턴</li> <li>[] 로 나타난 내용을 포함하지 않는 경우(부정) : [^A-Z] A부터 Z까지의 문자가 들어 있으면 안됨</li> <li>이거 아니면 저거 or 연산 : (abc | def) -> 보통 괄호로 둘러쌈. abc 이거나 def 인 경우임.</li> <li>0번 이상 반복 : [A-Z]* -> A부터 Z까지의 대문자가 아예 안나오거나(0번) 1번 이상 계속 나오는 경우.</li> <li>1번 이상 반복 : [A-Z[+ -> <span style="color: #333333; text-align: left;">A부터 Z까지의 대문자가<span> </span></span> 반드시 1번 이상 계속 나오는 경우 </li> </ul> <p data-ke-size="size16">나머지는 추후 정리...</p> <p data-ke-size="size16">참고 글 : <a href="https://npp-user-manual.org/docs/searching/#regular-expressions" target="_blank" rel="noopener noreferrer">https://npp-user-manual.org/docs/searching/#regular-expressions</a></p>

Viewing all articles
Browse latest Browse all 687

Trending Articles