REPLACE의 REGEX (정규표현식)를 이용한 특수문자 제거
엑셀 업로드, 또는 여러 입력 값 등에서 숫자만을 추출하기 위해 Replace문을 사용합니다.
Replace 문 사용시 Regex 를 이용하여 좀더 간단하게 숫자 이외의 것들을 제거하는 예시입니다.
ABAP 편집기에서 Replace문에서 F1을 누르면 좀더 다양한 정규표현식이 있이니 여러 상황에서 적절하게 사용하면 좀더 쾌적한 개발을 할 수 있습니다.
또한, 기존 Replace 문 외에 String function으로 제공되는 Replace문을 이용하면 in-line으로 더욱 간편하게 활용 할 수 있습니다.
# 소스코드 예시
DATA: LV_INPUT(50) TYPE C,
LV_OTPUT LIKE LV_INPUT.
DATA(LO_DEMO_OUTPUT) = CL_DEMO_OUTPUT=>NEW( ).
LV_INPUT = ' \\ // _ + * -1,111.22344 ABCDabcd에비씨디'.
LO_DEMO_OUTPUT->NEXT_SECTION( '원본' ).
LO_DEMO_OUTPUT->WRITE( LV_INPUT ).
"글자 숫자 . - 를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
REPLACE ALL OCCURRENCES OF REGEX '[^[:alnum:]|.|-]' IN LV_OTPUT WITH SPACE.
LO_DEMO_OUTPUT->NEXT_SECTION( '글자 숫자 . - 를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'REPLACE ALL OCCURRENCES OF REGEX ''[^[:alnum:]|.|-]'' IN LV_INPUT WITH SPACE.' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"String Function 글자 숫자 . - 를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
LV_OTPUT = REPLACE( VAL = LV_INPUT REGEX = '[^[:alnum:]|.|-]' WITH = SPACE OCC = 0 ).
LO_DEMO_OUTPUT->NEXT_SECTION( 'String Function 글자 숫자 . - 를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'LV_INPUT = REPLACE( VAL = LV_INPUT REGEX = ''[^[:alnum:]|.|-]'' WITH = SPACE OCC = 0 ).' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"글자 숫자를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
REPLACE ALL OCCURRENCES OF REGEX '[^[:alnum:]]' IN LV_OTPUT WITH SPACE.
LO_DEMO_OUTPUT->NEXT_SECTION( '글자 숫자를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'REPLACE ALL OCCURRENCES OF REGEX ''[^[:alnum:]]'' IN LV_INPUT WITH SPACE.' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"String Function 글자 숫자를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
LV_OTPUT = REPLACE( VAL = LV_INPUT REGEX = '[^[:alnum:]]' WITH = SPACE OCC = 0 ).
LO_DEMO_OUTPUT->NEXT_SECTION( 'String Function 글자 숫자를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'LV_INPUT = REPLACE( VAL = LV_INPUT REGEX = ''[^[:alnum:]]'' WITH = SPACE OCC = 0 ).' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"숫자를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
REPLACE ALL OCCURRENCES OF REGEX '[^[:digit:]]' IN LV_OTPUT WITH SPACE.
LO_DEMO_OUTPUT->NEXT_SECTION( '숫자를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'REPLACE ALL OCCURRENCES OF REGEX ''[^[:digit:]]'' IN LV_INPUT WITH SPACE.' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"String Function 숫자를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
LV_OTPUT = REPLACE( VAL = LV_INPUT REGEX = '[^[:digit:]]' WITH = SPACE OCC = 0 ).
LO_DEMO_OUTPUT->NEXT_SECTION( 'String Function 숫자를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'LV_INPUT = REPLACE( VAL = LV_INPUT REGEX = ''[^[:digit:]]'' WITH = SPACE OCC = 0 ).' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"숫자 . - 를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
REPLACE ALL OCCURRENCES OF REGEX '[^[:digit:]|.|-]' IN LV_OTPUT WITH SPACE.
LO_DEMO_OUTPUT->NEXT_SECTION( '숫자 . - 를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'REPLACE ALL OCCURRENCES OF REGEX ''[^[:digit:]|.|-]'' IN LV_INPUT WITH SPACE.' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"String Function 숫자 . - 를 제외한 문자 제거
MOVE LV_INPUT TO LV_OTPUT.
LV_OTPUT = REPLACE( VAL = LV_INPUT REGEX = '[^[:digit:]|.|-]' WITH = SPACE OCC = 0 ).
LO_DEMO_OUTPUT->NEXT_SECTION( 'String Function 숫자 . - 를 제외한 문자 제거' ).
LO_DEMO_OUTPUT->WRITE( 'LV_INPUT = REPLACE( VAL = LV_INPUT REGEX = ''[^[:digit:]|.|-]'' WITH = SPACE OCC = 0 ).' ).
LO_DEMO_OUTPUT->WRITE( LV_OTPUT ).
"String Function을 이용할 경우 in-line으로 Replace를 하여 문자열 처리 가능
LO_DEMO_OUTPUT->NEXT_SECTION( 'String Function을 이용할 경우 in-line으로 Replace를 하여 문자열 처리 가능' ).
LO_DEMO_OUTPUT->WRITE( '|총 금액 : { CONV BSEG-DMBTR( REPLACE( VAL = LV_INPUT REGEX = ''[^[:digit:]|.|-]'' WITH = SPACE OCC = 0 ) ) CURRENCY = ''KRW'' NUMBER = USER }원|.' ).
LO_DEMO_OUTPUT->WRITE( |총 금액 : { CONV BSEG-DMBTR( REPLACE( VAL = LV_INPUT REGEX = '[^[:digit:]|.|-]' WITH = SPACE OCC = 0 ) ) CURRENCY = 'KRW' NUMBER = USER }원| ).
LO_DEMO_OUTPUT->DISPLAY( ).
'ABAP > 개발Tip' 카테고리의 다른 글
[개발Tip] ALV Field catalog(필드 카탈로그) 만드는 3가지 방법 (0) | 2023.08.25 |
---|---|
[개발Tip] RESTful API 호출 2가지 방법(CL_HTTP_CLIENT, CL_REST_HTTP_CLIENT) (0) | 2023.06.28 |
[개발Tip] 비동기 처리를 위한 백그라운드 작업 생성 (0) | 2023.06.22 |
[개발Tip] Internal Table 성능(Select into, Read, Loop where) 비교 (1) | 2023.05.16 |
[개발Tip] 필드의 Conversion Exit(내부값/화면표시값 변환) 찾는 방법 (0) | 2023.05.11 |
댓글