본문 바로가기
ABAP/개발Tip

[개발Tip] REPLACE의 REGEX (정규표현식)를 이용한 특수문자 제거

by name_text 2023. 6. 22.

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( ).

댓글