본문 바로가기

IT Tech & Knowledge

실전에서 바로 사용하는 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', '_[^_]*$','')

반응형