IT'S YU
[Oracle] 정규 표현식 : REGEXP_REPLACE, REGEXP_SUBSTR을 위한 응용편 본문
정규식을 잘 사용하면 SQL과 각 종 프로그램의 연산속도를 감소시키며 프로그램을 단순화 시킬 수 있습니다.
시간이 걸리더라도 한번씩 사용해보면 좋습니다.
. | 하나의 문자를 의미합니다. ".*"하면 한개이상의 문자 즉 모든 문자를 의미합니다. |
$ | 끝을 의미한다. AAA$ 하면 AAA로 끝나는 것을 의미한다. |
\ | 특수 문자를 문자로 인식할때 사용합니다. |
¦ | 여러 식 중에서 하나를 선택합니다. SQL의 OR조건과 같습니다. "abc¦adc"는 abc와 adc 문자열을 모두 포함한다. |
^ | 문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않습니다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다. |
[] | "["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다. |
() | 여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다. |
* | 0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다. |
+ | "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다. [+ 앞 내용 기준] |
? | "a?b"는 "b", "ab"를 포함한다. [? 다음 내용 기준] |
{m} | "a{3}b"는 "aaab"만 포함한다. |
{m,} | "a{2,}b"는 "aab", "aaab", "aaaab"를 포함한다. "ab"는 포함되지 않는다. |
{m, n} | "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다 |
\n | 1에서 9까지의 숫자를 의미 |
\d | Matches a digit character. |
\D | Matches a nondigit character. |
\w | Matches a word character. |
\W | Matches a nonword character. |
\s | Matches a whitespace character. |
\S | matches a non-whitespace character. |
자주 사용하는 Class Syntex는 아래와 같습니다.
[:alnum:] | 영어와 숫자 |
[:alpha:] | 알파벳, [A-Za-z] |
[:blank:] | 공백과 탭 |
[:digit:] | 숫자 |
[:lower:] | 소문자, [a-z] |
[:punct:] | 특수문자 |
[:space:] | 공백(스페이스) |
[:upper:] | 대문자, [A-Z] |
[가-힣] | 한글전체 |
자주 사용하는 응용편
1. "["와 "]" 사이에 문자를 공백 처리하기, 괄호의 정의를 정하고 사이의 내용을 제거하면 됩니다.
regexp_replace(s, "\\[.*\\]", "")
2. 숫자와 문자를 제외하고 모두 제거
regexp_replace(nm, '[^A-Z0-9 ]', '')
3. 공백이 2개 이상인 부분을 제거
REGEXP_REPLACE('Kontext is a website for data engineers.','[\s]{2,}', '')
4. 끝에 문자가 _(으로 시작하고)_(으로 사작하지 않는) 문자로 끝나는 것
regexp_replace('The_quick brown fox jumped over the_fence', '_[^_]*$','')
'DB > Oracle' 카테고리의 다른 글
[Oracle] LPAD, LEVEL 사용해서 왼쪽 대각선 방향으로 순차적 순번 표시 (0) | 2023.03.17 |
---|---|
[Oracle] 스페이스(공백), 띄어쓰기, 특수문자 제거 (0) | 2023.03.17 |
[ORACLE] 오라클 공백문자(엔터,탭) 제거 (2) | 2023.01.30 |
[Oracle] ORA-01489: 문자열 연결의 결과가 너무 깁니다. (0) | 2022.12.07 |
[Oracle] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 오류 (1) | 2022.12.07 |