바로투입이력카드
SAP 게시판

정보·팁

ABAP 정규식(PCRE) 입문: 자주 쓰는 패턴과 FIND, REPLACE, 내장 함수

에이든ABAP 개발자운영자모듈 MMSD기타조회 1

3줄 요약

  • ABAP 에서 정규식은 PCRE 문법을 쓰고, FIND/REPLACE 의 PCRE 추가 구문, 내장 함수의 pcre 매개변수, CL_ABAP_REGEX/CL_ABAP_MATCHER 클래스, ABAP SQL 의 *_regexpr 함수에서 쓸 수 있어요.

  • 옛 POSIX 방식(REGEX 추가 구문)은 폐기 예정이고 PCRE 가 성능도 낫다고 해요.

  • 단순한 패턴 검색은 정규식 대신 CP/NP 비교 연산자나 단순한 함수가 낫다는 Clean ABAP 의 조언과 이어져요.

어떤 상황에서 쓰나요

전화번호 형식 검사, 문자열 안의 숫자 추출, 날짜 형식 변환처럼 규칙이 있는 문자열을 다룰 때 정규식이 편해요. 그런데 ABAP 는 정규식 문법이 여러 개(PCRE, XPath, XSD, POSIX)라서 어떤 것을 써야 하는지 헷갈려요. 치트시트의 *Regular Expressions in ABAP* 편은 PCRE 중심으로 자주 쓰는 패턴과 ABAP 문장을 모아 줘요.

핵심 내용

어디서 쓰나

  • FIND/REPLACE 문장의 PCRE 추가 구문

  • 내장 함수의 pcre 매개변수: find, find_end, count, match, matches, replace, contains, substring_from, substring_after, substring_before, substring_to

  • ABAP SQL/CDS 함수: like_regexpr, locate_regexpr, locate_regexpr_after, occurrences_regexpr, replace_regexpr, substring_regexpr

  • 시스템 클래스 CL_ABAP_REGEX, CL_ABAP_MATCHER

  • 문법: ABAP 은 커널의 PCRE2 라이브러리로 PCRE 를 지원하고 ABAP SQL 은 HANA 데이터베이스의 PCRE1 을 써요. XPath 와 XSD 정규식은 내부에서 PCRE 로 자동 변환돼요. POSIX 는 폐기 예정이고 구문 경고는 프라그마 ##regex_posix 로 숨길 수 있어요.

자주 쓰는 패턴 (치트시트가 표로 정리한 일부)

  • 문자 종류: .(임의의 한 문자, 줄바꿈 제외), \d/\D(숫자/숫자 아님), \s/\S(공백 문자), \w/\W(글자, 숫자, 밑줄)

  • 반복과 선택: x*(0회 이상), x+(1회 이상), x?(0 또는 1회), x{m,n}, x|y, 비탐욕 x*?, x+? (예: <.+?> 는 HTML 태그 하나씩 잡아요)

  • 위치: \A(시작), \Z(끝), \b(단어 경계), \K(지금까지 맞은 부분을 결과에서 제외)

  • 그룹: (...), 이름 있는 그룹 (?<name>...), 비캡처 (?:...), 역참조 \1, 바꿀 때 $1, ${name}, $0(전체)

  • 그 밖에 이스케이프, 문자 집합과 범위, 룩어라운드, 대소문자 변환, 옵션과 제어 동사, 콜아웃, 조건부 패턴도 시트에 있어요.

" 캡처 그룹으로 순서 바꾸기
DATA(r1) = replace( val = `APAB` pcre = `(..)(..)` with = `$2$1` ).   " ABAP

" 이름 있는 그룹으로 날짜 형식 바꾸기
DATA(r2) = replace( val = `20241128`
                    pcre = `(?<yr>\d{4})(?<mo>\d{2})(?<d>\d{2})`
                    with = `${d}.${mo}.${yr}` ).                       " 28.11.2024

ABAP 문장 예

  • FIND ALL OCCURRENCES OF PCRE [A-Za-z] IN str MATCH COUNT DATA(n). — 일치 횟수

  • FIND ALL OCCURRENCES OF PCRE \s IN str RESULTS DATA(res). — 위치와 길이 표

  • FIND PCRE (.*)\son\s(.*) IN str SUBMATCHES DATA(a) DATA(b). — 캡처 그룹 내용을 변수로

  • 마지막 쉼표 뒤 내용을 \K 와 룩어헤드로 찾고 MATCH OFFSET/MATCH LENGTH 로 추출하는 예가 있어요.

  • IN TABLE 로 문자형 줄 타입의 내부 테이블 안에서도 찾고 바꿀 수 있어요.

  • replace 함수에서 occ = 0 은 모든 일치를 바꿔요.

주의할 점

  • 잘못된 정규식은 cx_sy_invalid_regex, 너무 복잡하면 cx_sy_regex_too_complex 예외가 날 수 있어요. 사용자 입력을 정규식에 쓰기 전에 검증하세요.

  • 치트시트는 자주 쓰는 일부만 다루고, 완전한 PCRE 문법은 Perl 문서(perlre)를 안내해요. ABAP 에서는 표준과 다른 제약이 있을 수 있어요.

  • 단순한 검사는 정규식보다 CP, NP, contains, matches 가 읽기 쉽고 가볍다는 점은 Clean ABAP 연재 4회와 "최신 ABAP 문법 따라잡기" 연재 3회를 참고하세요.

  • 치트시트는 계속 갱신되는 문서예요. 이 편의 첫 공개는 2024년 11월이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/28_Regular_Expressions.md

출처와 이용 안내
  • 원문: ABAP Cheat Sheets - Regular Expressions in ABAP · 작성자 SAP SE and contributors SAP-samples · 작성일 2024-11-29 · 기준 릴리스에 따라 다름 원문은 PCRE2 기준, ABAP SQL 은 HANA 의 PCRE1 · 확인일 2026-10-25

  • 이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.

  • 원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.

  • 설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.

  • SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.

댓글 0

아직 댓글이 없어요.

정보·팁 목록전체 목록