포스팅 목차
o PRXPARSE
Perl 정규식 함수에 의해 이용될 Perl 정규식 표현을 정의 한다.
Category: | 문자열 비교 함수(문자열 매칭, Character String Matching) |
문 법
regular-expression-id=PRXPARSE (perl-regular-expression) |
regular-expression-id
는 PRXPARSE 함수에 의해 반환되는 인식자.
참 고
* PERL 문법
- Using Perl Regular Expressions in the DATA Step
SAS regular 형식 은 RX로 시작하고, Perl regular형식은 PRX로 시작한다.
좀 더 상세한 사항을 알고 싶으신 분은 PERL언어에 관하여 찾아보시기를 바랍니다.
* PERL : 자료를 추출하고 그에 의거한 보고서를 작성하는데 사용하는 프로그래밍언어 가운데 하나이다.
PRXPARSE("/cat/") | "The cat is black" | "cots" | cat이 들어간 위치 |
PRXPARSE("/^cat/") | "cat on the roof" | "The cat" | 첫 번째 cat 위치 |
PRXPARSE("/cat$/") | "There is a cat" | "cat in the house" | 마지막 cat 위치 |
PRXPARSE("/cat/i") | "The Cat" | "no dogs allowed" | 대소문 구분없이 cat |
PRXPARSE("/r[aeiou]t/") | "rat","rot","rut" | "rt","rxt" | |
PRXPARSE("/\d\d\d/") | "345","999".. | "1234","99" | 3자리 숫자 |
PRXPARSE("/\d\d\d?/") | "123","12" | "1","1AB","1 9" | 2자리 또는 3자리 숫자 |
PRXPARSE("/\d\d\d+/") | "123","12345" | "12X" | 3자리 이상 숫자 |
PRXPARSE("/\d\d\d*/") | "123","12","12345" | "1","xyz" | 2개 이상의 숫자 |
PRXPARSE("/(\d|x)\d/") | "56","x9" | "9x","xx" | (숫자또는x)+숫자 |
PRXPARSE("/[^a-e]\D/") | "fx","9","AA" | "aa","99","b%" | (처음a-e가아닌문자)+(비숫자문자) |
PRXPARSE("/^\/\///") | "//sysin dd *" | "the // is here" | 첫 위치에 // |
PRXPARSE("/^\/(\/|\*)/") | "//" or "/*" in cols 1 and 2 | "123 /*" | 첫 위치에 // 또는 /* 문자 |
PRXPARSE("/#//#/") | "//" | "/*" | // 문자 |
PRXPARSE("/\/\//") | "//" | "/*" | // 문자 |
PRXPARSE("/[\d\d]/") | "12" | "ab" | 2자리 숫자 |
PRXPARSE("/<cat>/") | "the cat is black" | "cots" |
메타 캐릭터 | 설명 |
\ | 그 다음 문자를 특수 문자, 리터럴, 역참조(반복되는 문자 그룹을 찾는 편리한 방법을 제공하며, 동일한 문자열을 다시 찾기 위한 간단한 명령), 또는 8진수 이스케이프로 표시합니다. 예를 들어, - 'n'은 문자 "n"을 찾는다. - '\n'은 줄 바꿈 문자를 찾는다. - '\\'는 "\"를 찾는다. - '\('는 "("를 찾는다. |
1 | 알파벳,숫자의 문자를 비교할 때 조건을 지정한다. |
^ | 입력 문자열의 시작 위치를 찾는다. - ^cat는 ‘cat','cats’는 일치하나,‘the cat'는 일치하지 않는다. |
$ | 입력 문자열의 끝 위치를 찾는다. - cat$는 ‘the cat'은 일치하나, ‘cat in the hat'은 일치하지 않는다. |
* | 부분식의 선행 문자를 0개 이상 찾는다. - 'zo*'는 "z", "zoo"등을 찾는다. - *는 {0,}과 동등하다. - cat*은 ‘cat','cats','catanddog'와 일치한다. - c(at)*은 ‘c','cat','catatat'와 일치한다. |
+ | 부분식의 선행 문자를 한 개 이상 찾는다. - “zo+”는 "zo", "zoo" 등을 찾는다. - “zo+"가 "z"는 아니다. - +는 {1,}와 동등하다. - \d+는 한 개 이상의 숫자와 일치한다. |
? | 부분식의 선행 문자를 0개 또는 한 개를 찾는다. - "do(es)?"는 "do" 또는 "does"에서 "do"를 찾는다. - ?는 {0,1}와 동등하다. - hello?는 ‘hell','hello'와 일치한다. |
{n} | n은 음이 아닌 정수로, 정확히 n개를 찾는다. - “o{2}”는 o가 2개인 “food”를 찾는다. - “o{2}" 는 "Bob"를 찾지 않는다. - \d{5}는 5자리 숫자와 일치한다.(\d\d\d\d\d) |
{n,} | n은 음이 아닌 정수로, n개 이상을 찾는다. - “o{2,}”는 “foooood"에서 o가 2개 이상인 모든 'o' 를 찾는다. - “o{2,}”는 "Bob"에서 ‘o'를 못찾는다. - “o{1,}”는 “o+"와 동등하다. - “o{0,}" 는 "o*"와 동등하다. - \w{3,}은 ‘cat','_NULL_'과 일치한다.(\w\w\w+) |
{n,m} | m과 n은 음이 아닌 정수로(n<=m), 최소 n개, 최대 m개 찾는다. - "o{1,3}"은 "gooooood"의 처음 세 개의 'o'를 찾는다. - "o{0,1}"은 "o?"와 동등하다. - \w{3,5}은 ‘abc','abcd','abcde'와 일치한다. [참고] 쉼표와 숫자 사이에는 공백을 넣을 수 없다. |
period(.) | 새줄을 제외하고 모든 단일 문자를 찾는다. 새로운 줄(newline)을 포함한 모든 단일 문자를 찾기위해서는 “[.\n]"과 같은 패턴을 이용하라. - r.n은 ‘ron','run','ran'과 일치한다. |
(pattern) | 패턴을 찾아서 매칭하는 것에 대해 캡쳐 퍼버를 생성한다. 캡쳐버퍼에서 위치와 length를 검색하기 위하여, CALL PRXPOSN을 이용하라. 캡쳐버퍼의 값을 검색하기 위해, PRXPOSN함수를 이용하라. - 괄호문자를 찾기위해서, "\(" 또는 "\)"를 사용하라. |
(?:pattern) | 패턴을 찾지만 검색한 문자열을 캡쳐하지 않는다.즉, 검색한 문자열을 나중에 사용할수 있도록 저장하지 않는 비캡쳐 검색이다. 이것은 패턴의 일부를 “or" 문자(|)로 묶을 때 유용하다. - "industr(?:y|ies)는 “industry|industries'보다 더 경제적이다. |
(?=pattern) | 포함 예상 검색은 pattern과 일치하는 문자열이 시작하는 위치에서 검색할 문자열을 찾는다. 검색한 문자열을 나중에 사용할수 있도록 캡쳐하지 않는 비캡쳐검색이다. 예상 검색은 검색할 문자열을 찾은 후 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 바로 다음부터 검색하기 시작한다. - “Windows(?=95|98|NT|2000)"는 ”Windows 2000"의 “Windows"는 찾지만, ”Windows 3.1"의 Windows"는 찾지 않는다. |
(?!pattern) | 제외 예상 검색은 pattern과 일치하지 않는 문자열이 시작하는 위치에서 검색할 문자열을 찾는다. 이것은 검색한 문자열을 나중에 사용할 수 있도록 캡쳐하지 않는 비캡쳐 검색이다. 제외 예상 검색은 검색할 문자열을 찾은 후, 제외 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 다음부터 검색하기 시작한다. - “Windows(?!95|98|NT|2000)"는 ”Windows 3.1의 “Windows"는 찾지만, “Windows 2000"의 Windows"는 찾지 않는다. |
x|y | x 또는 y를 찾는다. - "z|food" 는 "z" 또는 "food"를 찾는다. - "(z|f)ood"는 "zood" or "food"를 찾는다. - c(a|o)t는 'cat','cot'는 일치한다. |
[xyz] | 괄호안의 문자중에서 일치하는 문자 집합을 찾는다. - "[abc]"는 "plain"안의 "a"를 찾는다. - ca[tr]은 ‘cat','car'과 일치한다. |
[^xyz] | 괄호 밖의 문자중에서 일치하는 문자 집합이 아닌 것을 찾는다. - "[^abc]"는 "plain"에서 “p"를 찾는다. - [^8]\d\d는‘123’,‘999’와 일치하나, ‘800’은 일치하지 않는다. |
[a-z] | 지정한 범위 안의 문자를 찾는다. - "[a-z]"는 “a"에서부터 "z"사이의 모든 소문자를 찾는다. - [a-e]\D+ 는 'adam','edam','car'와 일치한다. - [a-eA-E]\w+는 'Adam','edam','B13'과 일치한다. |
[^a-z] | 지정한 범위 밖의 문자를 찾는다. - "[^a-z]"는 “a"에서부터 "z" 사이에 없는 문자를 찾는다. |
\b | 단어의 경게, 즉 단어와 공백 사이의 위치를 찾는다. - "er\b"는 “never"에서 "er"을 찾는다. - "er\b"는 “verb"에서 “er"은 찾지 못한다. |
\B | 단어의 비경계를 찾는다. - "er\B"는 “verb"에서 "er"을 찾는다. - "er\B"는 “never"에서 "er"은 찾지 못한다. |
\d | 숫자문자를 찾는다.([0-9]) - \d\d\d는 3자리 숫자문자와 일치한다. |
\D | 비숫자문자를 찾는다.([^0-9]) - \D\D는 ‘xx','ab','%%'와 일치한다. |
\s | 공백문자를 찾는다.([\f\n\r\t\v]) - \d+\s+\d+는 “123 4”와 일치한다. |
\S | 비공백문자를 찾는다.([^\f\n\r\t\v]) |
\t | 탭문자를 찾는다.("\x09") |
\w | 밑줄을 포함한 모든 단어 문자를 찾는다.([A-Za-z0-9_]) |
\W | 비단어 문자를 찾는다.([^A-Za-z0-9_]) |
\num | 양의 정수값을 찾는다. 캡쳐한 문자열에 대한 역참조이다. - "(.)\1"은 연속적으로 나오는 동일한 문자 두 개를 찾는다. |
\( | ‘(’ 문자를 찾는다. - \(\d\d\d\)는 ‘(123)’과 일치한다. |
\) | ‘)’ 문자를 찾는다. |
\\ | ‘\’ 문자를 찾는다. \D \\ |D는 “the \ character'과 일치한다. |
\1 | 이전 캡쳐와 일치하고, back reference(역참조)를 호출한다. - (\d\D\d)\1은 ‘9a99a9'는 일치하나, ’9a97b7'은 일치하지 않는다. |
관련 함수
함수명 | 함수내용 |
CALL PRXCHANGE | 지정한 패턴과 일치하는 문자열을 검색하여 검색된 부분을 변경하기 원하는 대체 문자열로 변경 작업을 수행한다. |
CALL PRXDEBUG | PERL 정규식이 컴파일 되는 과정과 패턴이 문자값과 일치 될 때 반환되는 값에 대한 정보를 제공한다. |
CALL PRXFREE | 메모리에 할당된 Perl regular 표현식을 초기화 한다. 일반적으로 데이터 스텝이 종료되면 리소스가 초기화 된다. |
CALL PRXNEXT | 문자열에서 지정한 패턴과 일치하는 패턴 검색 작업을 반복적으로 수행하여서 패턴과 일치하는 하위 문자열의 위치와 length를 반환한다. |
CALL PRXPOSN | capture 버퍼의 시작 위치와 length를 반환한다. |
CALL PRXSUBSTR | 패턴이 일치하는 문자열의 위치와 length를 반환한다. |
PRXCHANGE | 지정한 패턴과 일치하는 경우 변경 작업을 수행한다. |
PRXMATCH | 패턴 일치여부를 검색하고, 패턴이 발견된 첫 번째 위치를 반환한다. |
PRXPAREN | 패턴이 일치하는 마지막 캡쳐 버퍼의 값을 반환한다. |
PRXPARSE | Perl 정규식 함수에 의해 이용될 Perl 정규식 표현을 정의 한다. |
PRXPOSN | capture 버퍼에 할당된 값을 반환한다. 캡쳐 버퍼는 prxparse를 통해 패턴 선언시 괄호를 지정하여 나눌수 있다. |
예 제
prxparse함수를 이용하여서 패턴을 정의한다. 패턴은 ave, avenue, dr, drive, rd, road 의 단어를 검색하여 패턴이 일치하는 것의 위치를 찾는다.
call prxsubstr함수는 패턴이 일치하는 곳의 위치와 Length를 찾아서 반환하여 substr함수를 사용하여 패턴이 일치하는 단어를 반환받게 된다.
여기서 /i 옵션은 패턴 검색시 대소문자를 구분하지 않고 찾으라는 옵션이다.
SAS Statements |
data _null_;
if _N_ = 1 then do;
retain patternID;
pattern = "/ave|avenue|dr|drive|rd|road/i";
patternID = prxparse(pattern);
end;
input street $80.;
call prxsubstr(patternID, street, position, length);
if position ^= 0 then do;
match = substr(street, position, length);
put match:$QUOTE. "found in " street:$QUOTE.;
end;
datalines;
153 First Street
6789 64th Ave
4 Moritz Road
7493 Wilkes Place
;
Results |
"Ave" found in "6789 64th Ave"
"Road" found in "4 Moritz Road"
SAS 함수(SAS Function) 리스트 링크 |
엑셀(EXCEL)과 SAS 함수(SAS Function) 비교 리스트 링크 |
SAS 데이터 스텝 구문 리스트(SAS Data Step Statement) |
반응형
'SAS > SAS 함수' 카테고리의 다른 글
【SAS 함수】 334. PTRLONGADD (0) | 2021.10.10 |
---|---|
【SAS 함수】 333. PRXPOSN (0) | 2021.10.10 |
【SAS 함수】 331. PRXPAREN (0) | 2021.10.09 |
【SAS 함수】 330. PRXMATCH (0) | 2021.10.09 |
【SAS 함수】 329. PRXCHANGE (0) | 2021.10.08 |
댓글