일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이더리움
- 블록체인
- 스위프트
- play 강좌
- Hyperledger fabric gossip protocol
- play2 강좌
- 파이썬 동시성
- 하이브리드앱
- 하이퍼레저 패브릭
- 파이썬
- Play2 로 웹 개발
- 그라파나
- 엔터프라이즈 블록체인
- 플레이프레임워크
- 파이썬 강좌
- 파이썬 데이터분석
- CORDA
- 스칼라 강좌
- 스칼라
- akka 강좌
- 주키퍼
- Golang
- Play2
- Actor
- 파이썬 머신러닝
- Akka
- 스칼라 동시성
- hyperledger fabric
- 안드로이드 웹뷰
- Adapter 패턴
- Today
- Total
HAMA 블로그
정규표현식 (Regex) 정리 본문
정규표현식은 아주 가끔 쓰기때문에 항상 다시 볼때마다 헷갈리곤 하기에
주요 사용예를 내가 나중에 다시 봤을 때 편하도록 정리하여 보았다.
정규 표현식의 용어들정규 표현식에서 사용되는 기호를 Meta문자라고 표현한다. 표현식에서 내부적으로 특정 의미를 가지는 문자를 말하며 간단하게 정리하면 아래의 표와 같다.
표현식
|
의미
|
^x
|
문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다. |
x$
|
문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다. |
.x
|
임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다. |
x+
|
반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다. |
x?
|
존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다. |
x*
|
반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다. |
x|y
|
or 를 표현하며 x 또는 y 문자가 존재함을 의미한다. |
(x)
|
그룹을 표현하며 x 를 그룹으로 처리함을 의미한다. |
(x)(y)
|
그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다. |
(x)(?:y)
|
그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다. |
x{n}
|
반복을 표현하며 x 문자가 n번 반복됨을 의미한다. |
x{n,}
|
반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다. |
x{n,m}
|
반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다. |
Meta 문자들 중에서 좀 더 특수하게 사용되는 문자들이 존재한다. '[]' 는 내부에 지정된 문자열의 범위 중에서 한 문자만을 선택하다는 특수한 의미를 가진다. 그리고 내부에서 Meta문자를 사용하면 다른 의미를 가지고 동작할 수 있으므로 잘 확인하고 사용해야 한다. 좀 더 특별한 용도로 사용되는 것들은 아래의 표와 같다.
표현식
|
의미
|
[xy]
|
문자 선택을 표현하며 x 와 y 중에 하나를 의미한다. |
[^xy]
|
not 을 표현하며 x 및 y 를 제외한 문자를 의미한다. |
[x-z]
|
range를 표현하며 x ~ z 사이의 문자를 의미한다. |
\^
|
escape 를 표현하며 ^ 를 문자로 사용함을 의미한다. |
\b
|
word boundary를 표현하며 문자와 공백사이의 문자를 의미한다. |
\B
|
non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다. |
\d
|
digit 를 표현하며 숫자를 의미한다. |
\D
|
non digit 를 표현하며 숫자가 아닌 것을 의미한다. |
\s
|
space 를 표현하며 공백 문자를 의미한다. |
\S
|
non space를 표현하며 공백 문자가 아닌 것을 의미한다. |
\t
|
tab 을 표현하며 탭 문자를 의미한다. |
\v
|
vertical tab을 표현하며 수직 탭(?) 문자를 의미한다. |
\w
|
word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. |
\W
|
non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. |
정규표현식을 사용할 때 Flag 라는 것이 존재하는데 Flag를 사용하지 않으면 문자열에 대해서 검색을 한번만 처리하고 종료하게 된다. Flag는 다음과 같은 것들이 존재한다.
Flag
|
의미
|
g
|
Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다. |
i
|
Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다. |
m
|
Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다. |
사용 예제
개별 숫자 - /[0-9]/g
전체에서 0~9사이에 아무 숫자 '하나' 찾음
개발 문자 - /[to]/g
전체에서 t 혹은 o 를 모두 찾음
단어 - /filter/g
전체에서 f 따로 i 따로 찾는게 아니라 'filter' 라는 단어에 매칭되는것을 찾음
단어 제외 - /\b(?:(?!to)\w)+\b/g
전체에서 'to' 라는 단어를 빼고 다른 단어 매칭 / 확인결과 "Tutorial" 도 제외됨.
단어 제외 - \b(?!\bto\b)\w+\b
전체에서 'to' 라는 단어를 빼고 다른 단어 매칭 / 확인결과 "Tutorial" 는 제외 안됨. 이게 더 정확하다고 볼수있을듯.
이메일 - /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i
'시작을' 0~9 사이 숫자 or a-z A-Z 알바펫 아무거나로 시작하고 / 중간에 - _ . 같은 문자가 있을수도 있고 없을수도 있으며 /
그 후에 0~9 사이 숫자 or a-z A-Z 알바펫중 하나의 문자가 없거나 연달아 나올수 있으며 / @ 가 반드시 존재하고 /
0-9a-zA-Z 여기서 하나가 있고 / 중간에 - _ . 같은 문자가 있을수도 있고 없을수도 있으며 / 그 후에 0~9 사이 숫자 or a-z A-Z 알바펫중 하나의
문자가 없거나 연달아 나올수 있으며 / 반드시 . 이 존재하고 / [a-zA-Z] 의 문자가 2개나 3개가 존재 / 이 모든것은 대소문자 구분안함
전화번호 - /^\d{3}-\d{3,4}-\d{4}$/
시작을 숫자 3개로하며 / 중간에 하이픈 - 하나 존재 / 숫자가 3~4개 존재하며 / 하이픈 하나 존재 / 숫자 4개로 끝남
핸드폰 번호 - /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/
시작을 숫자 01로 시작하며 그 후에 0,1,6,7,8,9 중에 하나가 나올수도 있으며 / 하이픈 - 하나 존재할수도 있으며 / 숫자 3~4개 이어지고 /
또 하이픈 - 하나 존재할수도 있으며 / 숫자 4개가 이어짐
URL - ^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$
^(https?):\/\/
([^:\/\s]+)
(:([^\/]*))?
((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$
레퍼런스 :
http://stackoverflow.com/questions/7820930/regex-how-to-exclude-single-word <-- 이론
http://ccambo.blogspot.kr/2014/10/regular-expression.html <-- 이론
http://regexr.com/ <-- 테스트
'소프트웨어 사색 ' 카테고리의 다른 글
소프트웨어 개발/코딩용 폰트 끝판왕들~ (0) | 2015.09.08 |
---|---|
인터프리터 언어는 컴파일 언어보다 느린가? (0) | 2015.08.01 |
주요 오픈소스 라이센스 (0) | 2015.06.26 |
Actor 패턴 ? ActiveObject 패턴 ? with AKKA (0) | 2015.05.15 |
데브옵스(DevOps) 란 ? (0) | 2015.05.15 |