조건:
1. [Central]의 글자는 바뀔수 있습니다..
2. INTERIOR_COLOR등의 값도 매번 변화 됩니다.
[ ] 안에 정의된 값과 = 이전에 정의된 값도 실제 사용시 불필요해서 지우고 싶습니다.
검토 감사합니다.
입력정보
select '[Central]INTERIOR_COLOR != BASE_COLOR' pval from dual
union all
select '[Central]INTERIOR_COLOR = DARK_GRAY & ([Central]NATIONAL_CODE = EURO | [Central]NATIONAL_CODE = UK)' from dual
union all
select '[Central]EXTERIOR_COLOR = ELITE GREY' from dual
union all
select '[Central]VIN = VIN_001 | [Central]VIN = VIN_002' from dual
;
결과물
pval 속성
!BASE_COLOR
DARK_GRAY & (EURO | UK)
ELITE GREY
VIN_001 | VIN_002
WITH TMP1 AS (
select '[Central]INTERIOR_COLOR != BASE_COLOR' pval from dual
union all
select '[Central]INTERIOR_COLOR = DARK_GRAY & ([Central]NATIONAL_CODE = EURO | [Central]NATIONAL_CODE = UK)' from dual
union all
select '[Central]EXTERIOR_COLOR = ELITE GREY' from dual
union all
select '[Central]VIN = VIN_001 | [Central]VIN = VIN_002' from dual
)
SELECT A.*
, REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(pval, '\[Central\]INTERIOR_COLOR|\[Central\]NATIONAL_CODE|\[Central\]EXTERIOR_COLOR|\[Central\]VIN', '')
, '!=', '!')
, '=| ', '') TXT
FROM TMP1 A
;
치환으로 해봤습니다..
어설프긴 한데...찾아보고 만들어봤습니다~
with t as ( select '[Central]INTERIOR_COLOR != BASE_COLOR' pval from dual union all select '[Central]INTERIOR_COLOR = DARK_GRAY & ([Central]NATIONAL_CODE = EURO | [Central]NATIONAL_CODE = UK)' from dual union all select '[Central]EXTERIOR_COLOR = ELITE GREY' from dual union all select '[Central]VIN = VIN_001 | [Central]VIN = VIN_002' from dual ) select replace(regexp_replace(pval,'\[[A-Za-z]+\][A-Z_]+ ',''),'= ','') from t
SELECT pval
, REPLACE(REGEXP_REPLACE(pval, '[[][^!=]+'), '= ') x
FROM t
;
마농님 정규표현식 '[[][^!=]+' 해석 좀 가능 하실가요?
[ ] => [ ]에 있는 문자 중 하나를 일치
[^] => [ ]에 있는 문자를 제외한 모든 문자를 일치
+ => 하나 이상 일치
이렇게 정의된걸로 해석해 보면...
1. [[] => [ : 대괄호가 있고..
2. [^!=] => !, = 가 제외이고..
3. + => [[][^!=] 이게 하나이상 일치..??
...@.@ 아...해석이 안되네요..ㅠㅠ
대괄호 다음에 느낌표나 등호가 아닌 문자가 여러개 연결되어 오는 문자
다르게 말하면 대괄호부터 느낌표나 등호 이전까지 문자.
예시에서는 "[Central]INTERIOR_COLOR " 이부분이 되겠네요.
마농님 답변 감사드립니다..
인터넷에 예시로 나온 표현식을 보고 있는데...
대괄호는 반복을 의미하고..^는 제외를 의미하고..그런데 조합되면 이렇게 된다 라고..해석이 안되네요..ㅠㅠ
정규표현식은 어렵네요....ㅠㅠ
답글 감사드립니다...^^
대괄호는 문자 패턴을 지정하는 부분입니다. (반복 의미 아님)
반복은 + 입니다.
^ 은 대괄호 안에서는 제외를 의미하고, 대괄호 없이는 문자열의 시작부분을 의미합니다.
대괄호 자체를 정규식의 의미가 아닌 일반 대괄호로 인식시키기 위해 대괄호 안에 넣었습니다. [[]
일반문자로 인식시기기 위한 다른 방법으로는 \ 문자를 붙이는 방법도 있습니다. \[
[[] : 대괄호시작
[^!=] : 느낌표나 등호가 아닌 문자
[^!=]+ : 느낌표나 등호가 아닌 문자의 반복(1개 이상 반복)
[[][^!=]+ : 대괄호시작 부터 느낌표나 등호가 아닌 문자의 반복
정말 감사드립니다...ㅠㅠ