티스토리 뷰
https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D
프로그래밍을 하며 문자열 처리를 할 때 정규표현식을 쓰면 간단히 해결 되는 경우가 있습니다.
여지껏 정규표현식 공부를 미뤄두었다가 이제서야 공부하게 되네요.
우선 연습이 필요할텐데 이를 위한 사이트가 있음을 알게 되었습니다.
https://regexr.com/
또 c++11부턴 정규표현식을 위한 라이브러를 지원합니다.
http://www.cplusplus.com/reference/regex/
이를 잘 활용하면 문자열 처리를 좀 더 손쉽게 할 수 있을것입니다.
----------------------------------------------------------------
연습1.
([A-Z])\w+
위의 정규표현식은
우선 대문자로 시작함을 의미합니다. []는 괄호 안에 존재하는 범위의 문자 하나를 매칭시킵니다.
만약 [A-Z]* 선택한다면 대문자로 시작하여 대문자로만 존재하는 문자열을 모두 선택하게 됩니다.
그 다음으로 \w는 글자 하나를 선택하게 됩니다.
즉 대문자로 시작하면서 그다음으로 글자가 오는경우입니다.
다시말해 Az AA Ao 는 가능하지만 A9 ab A*는 안됩니다.
여기서 다시 +가 따라오므로 두번째 문자가 1개 혹은 그 이상 존재할때만 선택하게 됩니다.
결국 문자열중 대문자로 시작하는 단어를 모두 선택하게 됩니다.
이는 애당초 \w로 했을때 모든 단어를 선택하기 위함과는 차이가 있습니다.
\w는 소문자까지 포함되지만 [A-Z]를 시작으로 넣음으로 대문자로 시작하는 단어를 추출할 수 있게 됩니다.
-------------------------------------
연습2
확장자가 html또는 HTML을 선택하기.
12312.html
asds.jpg
__2.js
asd_jsp
As d4$.html
asd-aasd2.txt
asdadshtml
ASDASGF.httt
ASDA2323----asd.txml
___1112.html
dsad_html.html
_12ASddd.txt
1.html
a.mov
D.html
_.html
322.avi
.html
ASD.html
2323.html
AASD.HTML
__23..html
asdaf[2fds].html
asdas(443_34).html
__123[43(23)asd_)].txt
((()[[].html
ffa124.html3
ffa124.htmlaa
위와 같은 목록에서 html혹은 HTML의 확장자만 골라내는 정규식작성을 해봅시다.
우선 핵심으로는 파일 이름은
파일이름으로 올 수 있는 경우를 모두 조건에 담아야 합니다.
특수문자 띄어쓰기까지도요.
또 .를 중심으로 뒤의 확장자만 골라내야 합니다.
다시말해 html13 이런건 오면 안되죠.
우선 파일 이름을 추출하기 위해선
[\w\d .\[\]()$@*&]+
다음과 같은 식을 작성하면 완성입니다.
[ ]는 무엇이든 일치시키는 문자입니다. 즉 or조건과 일치한다고 볼 수 있죠.
때문에 []로 시작하면서 []의 문자열 셋이 한개 이상 존재하기만 한다면 파일 이름을 골라 낼 수 있습니다.
이를 위해선 +의 조건을 붙입니다.
만약 *이라면 0개 이상이기 때문에 .html도 골라내게 됩니다. (필요하면 *로 해도 되겠죠)
다음으로 .을 골라 내기 위해선
\.
을 이어줍니다.
그냥 .를 한다면 어떤 문자든 하나를 일치시키기때문에 특수문자인 .을 특별히 지칭하기 위해
\.로 입력합니다.
즉 앞의 문자열( []+ )에 이어 \.을 붙임으로 문자열+. 이 오게 됩니다.
마지막으로 확장자를 추출하기 위해
(html|HTML)\b
으로 완료합니다.
()에 오는 문자열은 정확히 괄호 안의 문자열이 일치 해야하는데 | 조건을 덧붙임으로 두가지 문자열 중 하나만 정확히 일치하게 합니다.
하지만 html13같은 불 필요한 문자까지 오면 안되므로 마지막으로 \b을 붙입니다.
\b는 문자열의 경계선 끝을 지칭합니다 만약 \B라면 문자열의 시작을 의미하게 됩니다.
즉, html13같은 문자열만 골라내게 됩니다.
최종적으로,
[\w\d .\[\]()$@*&]+\.(html|HTML)\b
으로 완료합니다.
다른 확장자를 오게 하고 싶다면 html대신 다른것을 넣으면 되겠습니다.
'프로그래밍 > Algorithm_DataStructure' 카테고리의 다른 글
정규표현식(regex) 연습하기2 (2017 하반기 카카오 공채 문제 다트 게임) (0) | 2017.10.07 |
---|---|
[Code Jam] 2016 Round1B A.Getting the Digits (0) | 2017.04.14 |
[Code Jam] 2016 Qualification Round B.Revenge of the Pancakes (0) | 2017.04.13 |
[Code Jam] 2016 Qualification Round A. Counting Sheep (0) | 2017.04.12 |
[자료구조] Treap (Heap+Tree) (0) | 2017.03.02 |
- Total
- Today
- Yesterday
- 중국
- linux
- peram jam
- yiruma
- 악보
- Pointer
- 문자열
- kernerl
- regex
- Spring
- 여행
- STL
- C language
- 드럼
- cpp
- 알고리즘
- 정규표현식
- 카카오 공채
- 이루마
- C++
- link
- python
- printf
- 코드잼
- 피아노
- 사천
- Codejam
- 중국여행
- Algorithm
- compile
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |