ABAP 문자열 검색과 정규식 - FIND ... REGEX 활용

ABAP 문자열 검색과 정규식 배너

FIND 구문 기본

마스터 데이터에 섞여 들어온 특수문자를 점검하거나, 특정 패턴이 들어 있는 텍스트를 골라내야 할 때 ABAP의 FIND 구문이 유용합니다. 가장 단순한 형태는 문자열 안에 특정 부분 문자열이 있는지 확인하는 것입니다.

1DATA(lv_text) = 'This is an example string for example.'.
2
3FIND 'example' IN lv_text.
4IF sy-subrc = 0.
5  WRITE: / '찾음! 위치(sy-fdpos):', sy-fdpos.
6ENDIF.

모든 출현 위치를 한 번에 얻으려면 ALL OCCURRENCES를 사용합니다.

1FIND ALL OCCURRENCES OF 'example' IN lv_text RESULTS DATA(lt_result).
2WRITE: / |{ lines( lt_result ) }건 발견|.

REGEX로 정규식 검색

REGEX 키워드를 붙이면 정규식 패턴으로 검색할 수 있습니다. 아래는 'This' 또는 'example'에 해당하는 위치를 모두 찾는 예시입니다.

1DATA: lv_string1 TYPE string,
2      lv_search  TYPE string.
3
4lv_string1 = 'This is an example string for example.'.
5lv_search  = 'This|example'.   " OR 패턴
6
7FIND ALL OCCURRENCES OF REGEX lv_search IN lv_string1 RESULTS DATA(lt_result2).
8
9IF lt_result2 IS NOT INITIAL.
10  LOOP AT lt_result2 INTO DATA(ls_match).
11    WRITE: / |매칭 위치 offset={ ls_match-offset } length={ ls_match-length }|.
12  ENDLOOP.
13ENDIF.

RESULTS 테이블에는 각 매칭의 offset(시작 위치)length(길이)가 담기므로, 이후 해당 위치의 문자열을 잘라내거나 치환하는 후처리에 활용할 수 있습니다.

실무 패턴: 특수문자 점검

마스터 데이터 채번/이관 시, 허용되지 않은 특수문자가 값에 섞여 있는지 점검해야 할 때가 많습니다. 정규식으로 "허용 문자 외의 것"을 찾는 패턴이 깔끔합니다.

1" 영문 대문자/숫자/언더스코어가 아닌 문자가 있으면 매칭
2DATA(lv_code) = 'MAT-0001'.   " (예시) 자재코드
3
4FIND REGEX '[^A-Z0-9_]' IN lv_code.
5IF sy-subrc = 0.
6  WRITE: / |허용되지 않은 특수문자가 있습니다 (위치 { sy-fdpos }).|.
7ELSE.
8  WRITE: / '정상 코드입니다.'.
9ENDIF.

자주 쓰는 정규식 조각을 정리하면 다음과 같습니다.

패턴의미
A|BA 또는 B (OR)
[^A-Z0-9]영문 대문자·숫자가 아닌 문자
\d+숫자 1자 이상
\s공백 문자(스페이스/탭 등)
^...$문자열 전체가 패턴과 일치하는지 (앵커)
검색만이 아니라 치환도

같은 정규식을 REPLACE ALL OCCURRENCES OF REGEX ... IN ... WITH ...구문에 그대로 사용하면, 특수문자를 한 번에 제거·치환할 수 있습니다.

정리

  • 단순 포함 여부는 FIND ... IN ..., 전체 출현은 FIND ALL OCCURRENCES로 확인합니다.
  • 패턴 검색이 필요하면 REGEX 키워드로 정규식을 사용하고, RESULTS 테이블의 offset/length로 후처리합니다.
  • "허용 문자 외" 패턴([^...])은 특수문자 점검에 특히 유용합니다.

Disclaimer — 이 포스트는 AI(Claude)를 활용하여 작성된 초안을 바탕으로 검수 및 보완하여 작성되었습니다. 내용 중 오류나 오타가 있다면 댓글로 알려주시면 감사하겠습니다.