정규표현식
정규표현식은 특정한 규칙을 가진 문자열의 집합으로 프로그래밍 언어에서 문자열의 검색과 치환을 위해 사용할 수 있는 정규식이다.
일부 언어인 펄, 자바스크립트, 루비 처럼 문법에 내장되어있는 경우가 있는 반면 자바, 파이썬, C , C++ 등등의 언어에서는 표준 라이브러리로 제공해 준다.
1. 패턴 그대로를 매칭하는 경우 : 단어 그대로를 패턴으로 사용하여 매치되는 영역을 찾는다.
EX) SELECT * FROM TABLE WHERE REGEXP_LIKE (COLUMN_NAME, '단어');
2. 메타 문자 및 수량 한정자를 사용하는 경우 : 정규식 패턴에 사용되는 문자들 중에 검색을 도와주는 특별한 메타 문자들이 존재합니다. 이를 이용해 폭넓게 패턴에 적용할 수 있습니다.
EX) 1 goooole, 2 ggle, 3 goooole을 찾아야 할 때 SELECT * FROM TABLE WHERE REGEXP_LIKE(COLUMN_NAME, '\dgo* ');로 찾을 수 있다.
1) 메타 문자란
메타 문자는 특정한 문자 혹은 문자 계열을 대표해 사전에 약속되어있는 문자를 뜻합니다.
약속된 키워드이기 때문에 만약 메타 문자를 그대로 사용하고 싶다면 역슬래시를 이용해 사용해야 합니다.
2) 수량 한정자란
수량 한정자는 반복을 몇 번 할 것인가, 또는 얼마나 허용할 것인가에 관한 규칙을 표현할 수 있도록 도와주는 약속된 문자입니다.
자주 사용되는 메타 문자
메타문자 | 설명 | 예시 |
. |
새 줄(NEW LINE)을 제외한 어떠한 문자 하나에 대응되어 일치합니다.
|
REGEXP_LIKE (COLUMN_NAME, '..') 2개 이상의 어떠한 문자와도 일치 |
( ) | 일련의 패턴 요소들을 하나의 요소로 묶는다. |
(cu|la) te : cute와 late에 모두 매치되는 패턴을 그룹으로 묶었다. (abc){2} : abcabc (abc)라는 그룹이 2번 반복 |
+ | 1번 이상 발생하는 패턴과 일치시킨다. | ab+c : abbc abbbc abbbbbc b라는 문자가 1번이상 발생하는 패턴입니다. |
^ | 문자의 시작위치를 알리는 메타문자 | ^abc 는 a로 시작하는 문자를 매칭합니다 |
$ | 문자의 끝위치를 알리는 메타문자 | abc$는 끝문자가 c인 문자를 매칭합니다. |
{n } {n ,} {n, m} |
n, m은 음이 아닌 정수이며 {n}은 n개를 매칭 하며 {n.}은 n개 이상일 때 매칭 하며 {n , m}은 n <=m을 만족하며 최소 n개에서 m개를 매칭 합니다. {0,1}은 문자의? 를 의미합니다. |
a {1} 은 a가 1개일 때 매칭 됩니다 a {2,} a가 2개 이상일 때 매칭 됩니다. a {3,5} a가 최소 3개 이상 5개 이하일 때 매칭 됩니다. a {0,1}은 a가 있거나 없을 때 매칭 됩니다. |
[ ] [^ ] |
대괄호로 묶인 문자 중 하나와 매칭 되는 값을 찾습니다. [^ ]는 괄호에 포함된 문자를 제외하고 매칭되는 값을 찾습니다. 대, 소 문자를 구별합니다. |
[a]는 a가 포함된 값을 매칭 합니다. [^a]는 a가 포함되지 않은 값을 매칭 합니다. |
? |
앞의 문자나 집합을 0개나 1개를 매칭합니다. |
a(bc)? 는 a혹은 abc가 0개 있거나 1개 있는 값을 매칭 합니다. |
\d |
십진수를 나타냅니다. |
\da는 십진수+a를 매칭 합니다. |
\D |
십진수가 아닌 숫자를 나타냅니다 |
\Da는 십진수가 아닌 수 +a를 매칭 합니다. |
\s |
공백, 탭, 용지 공급 등을 비롯한 모든 공백 문자를 찾습니다. |
\s는 공백이 포함된 값을 매칭 합니다. |
\S |
공백이 아닌 문자를 찾습니다. |
\S는 공백이 포함되지 않은 값을 매칭 합니다 |
\t |
탭 문자를 찾습니다. |
|
\Z |
일치하는 내용을 문자열의 끝이나 문자열 끝의 \n 앞에서 찾도록 지정합니다. |
|
\z |
일치하는 내용을 문자열 끝에서 찾도록 지정합니다. |
|
\n |
줄 바꿈을 의미합니다. |
|
\w |
문자+숫자와 매치 되는 것을 의미 |
[a-zA-Z_0-9]와 같습니다. |
\W |
문자+숫자가 아닌 것과 매치됨을 의미 |
[^a-zA-Z_0-9]와 같습니다. |
-캡쳐링 그룹()
괄호로 둘러싼 단위는 그룹을 나타낸다.() 그룹은 전체 패턴 내에서 다시 하나로 묶이는 패턴 조각을 나타낸다.
보통 | 나 수량 한정자를 그룹에 붙이는 형태로 많이 사용되며, 한 번 매치한 그룹이 반복되어 나타나는 경우에도 사용할 수 있다.
(a|b|c){2} df\1라는 식은 a 혹은 b 혹은 c의 문자가 2번 반복되며 다음 df라는 문자가 온 뒤 다시 한번 동일하게 그룹 된(a|b|c) 내용이 온다는 뜻이다. 수미상관이 존재한다는 말이다. 예시를 들면 aadfaa , abdfab라는 문자열이 매치되며 acdfbb는 그룹 된 내용이 같지 않으므로 매치되지 않는다. 이것은 캡쳐링 그룹이라 한다.
-비 캡쳐링 그룹
(?: )을 사용하게 되면 그룹으로 묶어주지만 캡처는 하지 않는 비 캡쳐링 그룹이 된다.
예를 들자면
'industr(?:y|ies)는 'industry|industries'보다 더 효율적인 표현입니다.
데이터를 검사하는 방법 중인 하나인 정규표현식은 모든 산업체에서 공통적으로 쓰인 다는 장점이 있습니다. 만약 웹에서 입력받은 데이터를 데이터베이스에 보내기 전 검사를 할 때도 정규표현식을 사용할 수 있습니다. 웹 개발을 연습하면서 알게 되는 정규표현식을 지속적으로 업데이트하도록 하겠습니다.
'Database > Oracle' 카테고리의 다른 글
ORACLE SQL SELF JOIN (0) | 2020.04.15 |
---|---|
ORACLE SQL 문자열 내장 함수 (1) (0) | 2020.04.15 |
ORACLE SQL JOIN (0) | 2020.04.14 |
SQL TABLE , 자료형 (0) | 2020.04.07 |
Oracle SQL 설치 (0) | 2020.04.06 |
댓글