프로그램을 개발하는 도중에 사번을 체크 할 일이 생겼다. 사번이 특별한 형태로 이루어져 있기 때문에 어떻게 쉽게 체크 할 수 없을까 고민 끝에 정규표현식을 사용해 보기로 했다. 기존에 웹 개발을 했을 때도 가끔 사용하기도 했는데 이게 생각보다 간단한것 같지만 이해도 잘 안돼서 망한 경우도 많이 있었다. ㅎㅎ
오늘의 사번 형태는 AB + 숫자 6자리인 형태인 사번을 체크하는 로직이다. 앞에 AB 는 "AB로 시작하는" 의 의미이다. 그리고 [0-9] 는 "0~9 사이의 숫자가 들어 올 수 있다는" 의미이고 {6} 은 "6자리를 의미"한다. 간단하게 예제소스를 돌려보면 abap_true 값인 'X' 값이 출력 되는 것을 알 수 있다.
REPORT ytest_regex. DATA : lr_matcher TYPE REF TO cl_abap_matcher, v_success TYPE abap_bool, v_pattern(200) TYPE c, p_account(8) TYPE c. p_account = 'AB123456'. CLEAR v_success. CONCATENATE 'AB[0-9]{6}$' '' INTO v_pattern. lr_matcher = cl_abap_matcher=>create( pattern = v_pattern text = p_account ). CALL METHOD lr_matcher->match RECEIVING success = v_success. IF v_success = abap_true. ENDIF. WRITE : v_success.
이건 진짜 간단하게 작성해 본 코드이다. 하지만 이런식으로 확장해 나간다면 좀 더 복잡한 내용을 정규표현식으로 간단하게 Validation 을 체크 할 수 있다. ( 예를 들자면 이메일형식, 전화번호, 주민등록번호 등등 )
아래는 위키피디아에 나온 정규표현식의 기본 문법이다. ( 링크 )
식 |
기능 |
설명 |
. |
문자 |
1개의 문자와 일치한다. 단일행 모드에서는 새줄 문자를 제외한다. |
\ |
이스케이프 |
특수 문자를 식에 문자 자체로 포함한다. |
¦ |
선택 |
여러 식 중에서 하나를 선택한다. 예를 들어, "abc¦adc"는 abc와 adc 문자열을 모두 포함한다. |
^ |
부정 |
문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함한다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다. |
[] |
문자 클래스 |
"["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다. |
() |
하위식 |
여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다. |
* |
0회 이상 |
0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다. |
+ |
1회 이상 |
"a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다. |
? |
0 또는 1회 |
"a?b"는 "b", "ab"를 포함한다. |
{m} |
m회 |
"a{3}b"는 "aaab"만 포함한다. |
{m,} |
m회 이상 |
"a{2,}b"는 "aab", "aaab", "aaaab"를 포함한다. "ab"는 포함되지 않는다. |
{m, n} |
m회 이상 n회 이하 |
"a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다. |
ABAP 은 정규표현식을 사용하기 위한 cl_abap_matcher 클래스를 사용하는데 위에 사용한 것은 Matching 이 됐는지 안됐는지 정도의 간단한 내용이지만 꽤나 강력하게 사용 할 수 있을 것 같다. 클래스를 더 분석해서 자료를 정리하여 포스팅 해봐야겠다.
- 끗 -
'SAP > ABAP' 카테고리의 다른 글
ABAP 금액 변환 방법 및 함수 (0) | 2014.08.22 |
---|---|
ABAP 문자열 대문자, 소문자로 변환하는 방법 Translate (0) | 2014.08.07 |
CR 이 Lock 걸렸을 때 푸는 방법 ( SE09 사용 ) (0) | 2014.08.06 |
Short Dump AC_SYSTEM_FLUSH 에 대처하는 우리의 자세 (0) | 2014.08.01 |
SM30 Maintenance View 실행시 상단 타이틀 깨지는 현상 (0) | 2014.07.30 |
ABAP Dynamic Internal Table 을 Read Table 하기 (0) | 2014.07.16 |
Variant 없이 Batch Job 생성하기 ( Dummy Variant 생성 ) (0) | 2014.07.16 |
ABAP Report Dynamic Variant 만들기 (0) | 2014.07.11 |
Tcode 조회 사이트 (0) | 2014.07.03 |
ALV 엑셀 Export 시 데이터 분리 현상 해결방법 (0) | 2014.07.03 |