포스팅 목차
o PRXMATCH
패턴 일치여부를 검색하고, 패턴이 발견된 첫 번째 위치를 반환한다.
| Category: | 문자열 비교 함수(문자열 매칭, Character String Matching) |
문 법
PRXMATCH (regular-expression-id | perl-regular-expression, source) |
Arguments
regular-expression-id
PRXPARSE 함수에 의해 반환되는 패턴 식별자 값이 포함된 수치형 변수를 지정한다. 이 인수를 사용하는 경우 PRXPARSE 함수도 함께 사용해야 한다.
perl-regular-expression
Perl 정규 표현식을 값으로 하는 문자형 상수, 변수 또는 표현식을 지정한다.
source
검색할 문자형 상수, 변수 또는 표현식을 지정한다.
상세 내용
기본 사항
regular-expression-id 를 사용하는 경우 PRXMATCH 함수는 PRXPARSE가 반환하는 regular-expression-id 로 source 를 검색하여 문자열이 시작되는 위치를 반환한다. 일치하는 항목을 찾지 못하면 PRXMATCH는 0을 반환한다.
perl-regular-expression 을 사용하는 경우 PRXMATCH 함수는 perl-regular-expression 을 사용하여 source 를 직접 검색하기 때문에 PRXPARSE 함수를 호출할 필요가 없다.
WHERE 절과 PROC SQL에서 PRXMATCH 함수를 Perl 정규식과 함께 사용할 수 있다. 패턴 검색(매턴 매칭, pattern matching )에 대한 상세 내용은 Pattern Matching Using Perl Regular Expressions (PRX) 을 참고하라.
Perl 정규 표현식(정규식) 컴파일 하기
perl-regular-expression이 상수이거나 /o 옵션을 사용하는 경우 Perl 정규 표현식은 한 번만 컴파일되고, 이 후 PRXMATCH 함수를 사용할 때마다 컴파일된 정규식이 재사용된다. perl-regular-expression이 상수가 아니고 /o 옵션을 사용하지 않는 경우 PRXMATCH 함수를 호출할 때마다 Perl 정규식이 다시 컴파일된다.
참고 : 1회 컴파일 후 재사용하는 방식은 DATA 스텝, WHERE 절 또는 PROC SQL에서 PRXMATCH 함수를 사용하는 경우 발생한다. 이외 다른 사용처에서는 PRXMATCH 함수를 호출할 때마다 perl-regular-expression이 재컴파일된다.
비 교
Perl 정규 표현식(PRX) 함수와 CALL 루틴은 패턴과 일치하는 문자열을 조작하기 위해 함께 작동한다.
참 고
- 정규식 참고( KoXo 자바스크립트 매뉴얼 : http://koxo.com/lang/js/refers/jsGroup.html )
- 패턴 매칭 변경자(M o d i f i e r s) : /i(대소문자를 구별하지 않음)
SAS regular 형식 은 RX로 시작하고, Perl regular형식은 PRX로 시작한다.
좀 더 상세한 사항을 알고 싶으신 분은 PERL언어에 관하여 찾아보시기를 바랍니다.
* PERL : 자료를 추출하고 그에 의거한 보고서를 작성하는데 사용하는 프로그래밍언어 가운데 하나이다.
관련 함수
| 함수명 | 함수내용 |
| CALL PRXCHANGE | 지정한 패턴과 일치하는 문자열을 검색하여 검색된 부분을 변경하기 원하는 대체 문자열로 변경 작업을 수행한다. |
| CALL PRXDEBUG | PERL 정규식이 컴파일 되는 과정과 패턴이 문자값과 일치 될 때 반환되는 값에 대한 정보를 제공한다. |
| CALL PRXFREE | 메모리에 할당된 Perl regular 표현식을 초기화 한다. 일반적으로 데이터 스텝이 종료되면 리소스가 초기화 된다. |
| CALL PRXNEXT | 문자열에서 지정한 패턴과 일치하는 패턴 검색 작업을 반복적으로 수행하여서 패턴과 일치하는 하위 문자열의 위치와 length를 반환한다. |
| CALL PRXPOSN | capture 버퍼의 시작 위치와 length를 반환한다. |
| CALL PRXSUBSTR | 패턴이 일치하는 문자열의 위치와 length를 반환한다. |
| CALL SCAN | 문자열에서 주어진 단어의 위치와 length 반환한다. |
| CALL SCANQ | Quotation Mark에 의해 구분된 구분자는 무시하고, 문자에서 주어진 단어의 위치와 length 반환한다. |
| COUNTW | 문자열에서 지정한 단어의 갯수를 카운트한다. |
| FIND | 지정한 문자열 안에 지정 문자 위치를 반환한다. |
| FINDC | 지정한 문자열 안에 지정 문자의 존재성에 대한 결과 반환한다. |
| FINDW | 문자열에서 지정한 단어의 문자 위치를 반환하거나 문자열에 존재하는 단어의 갯수를 반환한다. |
| INDEX | 문자열에서 해당 문자열 단위로 위치를 검색하여 첫 번째 위치를 반환한다. |
| INDEXC | 문자열에서 해당 문자 단위로 위치를 검색하여 첫 번째 위치를 반환한다. |
| INDEXW | 문자열에서 해당단어 단위로 위치 검색하여서 첫 번째 단어 위치를 반환한다. excerpt는 단어 앞뒤의 공백은 제거후 검색한다. |
| PRXCHANGE | 지정한 패턴과 일치하는 경우 변경 작업을 수행한다. |
| PRXMATCH | 패턴 일치여부를 검색하고, 패턴이 발견된 첫 번째 위치를 반환한다. |
| PRXPAREN | 패턴이 일치하는 마지막 캡쳐 버퍼의 값을 반환한다. |
| PRXPARSE | Perl 정규식 함수에 의해 이용될 Perl 정규식 표현을 정의 한다. |
| PRXPOSN | capture 버퍼에 할당된 값을 반환한다. 캡쳐 버퍼는 prxparse를 통해 패턴 선언시 괄호를 지정하여 나눌수 있다. |
| SCAN | 문자열에서 지정한 n번째 단어를 추출한다. |
| SCANQ | quotation marks로 둘러쌓인 경우 구분자를 무시하고, 문자열로부터 n번째 단어를 추출한다. |
| VERIFY |
지정한 문자열과 대상 문자열을 비교하여 지정한 문자열이 존재하지 않는 문자의 첫 번째 위치를 반환한다. |
예 제
예 제 1 :
'Hello world!'에서 world 문자가 발견된 첫 위치를 반환한다.
| SAS Statements |
data _null_;
patternID = prxparse('/world/');
position = prxmatch(patternID, 'Hello world!');
put position =;
run;
| Results |
| position=7 |
예 제 2 :
HH:SS(.MMM)의 형태를 찾는다.
(?:\.(\d+))? : 이것은 패턴에 대한 검색은 하나 캡쳐를 하지 않는 비캡쳐 검색으로, 패턴 매칭은 하나 변수로 추출 하지않는 즉,있으면 찾고 없으면 생략하는 방식이라 하겠다.
시간의 형태에 따라서 분,초 또는 분,초,MS의 형태로 나눈다.
| SAS Statements |
data _null_;
if _N_ = 1 then do;
retain PerlExpression;
pattern = "/(\d+):(\d\d)(?:\.(\d+))?/";
PerlExpression = prxparse(pattern);
end;
array match[3] $ 8;
input minsec $80.;
position = prxmatch(PerlExpression, minsec);
if position ^= 0 then do;
do i = 1 to prxparen(PerlExpression);
call prxposn(PerlExpression, i, start, length);
if start ^= 0 then match[i] = substr(minsec, start, length);
end;
put match[1] "minutes, " match[2] "seconds" @;
if ^missing(match[3]) then put ", " match[3] "milliseconds";
end;
datalines;
14:56.456
45:32
;
run;
| Results |
14 minutes, 56 seconds, 456 milliseconds
45 minutes, 32 seconds
예 제 3 :
기본적으로 bar의 단어로 단독으로 존재하거나, 앞에 'foo'를 포함하는 문장을 검색한다.
| SAS Statements |
data back;
input x $12.;
position=prxmatch('/(?:foo)?bar/',x);
cards;
foo
bar
foobar
foo bar
some foo
some bar
some foobar
some foo bar ;
run;
| Results |
x position
foo 0
bar 1
foobar 1
foo bar 5
some foo 0
some bar 6
some foobar 6
some foo bar 10
예 제 4 :
zip변수 형태가 5자리-4자리 숫자 형태인 데이터를 검색하여 추출한다.
| SAS Statements |
data ZipCodes;
input name: $16. zip:$10.;
datalines;
Johnathan 32523-2343
Seth 85030
Kim 39204
Samuel 93849-3843
;
data ZipPlus4;
set ZipCodes;
where prxmatch('/\d{5}-\d{4}/', zip);
run;
| Results |
name zip
Johnathan 32523-2343
Samuel 93849-3843
| SAS 함수(SAS Function) 리스트 링크 |
| 엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크 |
| SAS 데이터 스텝 구문 리스트(SAS Data Step Statement) |
'SAS > SAS 함수' 카테고리의 다른 글
| 【SAS 함수】 332. PRXPARSE (0) | 2021.10.09 |
|---|---|
| 【SAS 함수】 331. PRXPAREN (0) | 2021.10.09 |
| 【SAS 함수】 329. PRXCHANGE (0) | 2021.10.08 |
| 【SAS 함수】 328. PROPCASE (0) | 2021.10.08 |
| 【SAS 함수】 327. PROBT (0) | 2021.10.08 |
댓글