Some examples about perl expression

Some examples about perl expression,第1张

概述详见:http://www2.sas.com/proceedings/sugi29/265-29.pdf   ***Primary functions: PRXPARSE, PRXMATCH;/*Program 1: Using a Perl regular expression to locate lines with an exact text match*/DATA _NULL_;

详见:http://www2.sas.com/proceedings/sugi29/265-29.pdf

 

***Primary functions: PRXPARSE,PRXMATCH;/*Program 1: Using a Perl regular Expression to locate lines with an exact text match*/DATA _NulL_;Title "Perl Regular Expression Tutorial – Program 1";IF _N_ = 1 THEN PATTERN_NUM = PRXPARSE("/cat/");/*prxparse:定义正则表达*/RETAIN PATTERN_NUM;input STRING .;position = PRXMATCH(PATTERN_NUM,STRING);/*prxmatch:定义文本形式*/file PRINT;PUT PATTERN_NUM= STRING= position=;DATAlines;There is a cat in this line.Does not match CATcat in the beginningAt the end,a catcat;/*Program 2: Using a regular Expression to search for phone numbers in a string*/***Primary functions: PRXPARSE,PRXMATCH;DATA PHONE;IF _N_ = 1 THEN PATTERN = PRXPARSE("/\(\d\d\d\) ?\d\d\d-\d{4}/");***Regular Expression will match any phone number in the form:(nnn)nnn-nnnn or (nnn) nnn-nnnn.;/*\( matches a left parenthesis\d\d\d matches any three digits(blank)? matches zero or one blank\d\d\d matches any three digits- matches a dash\d{4} matches any four digits*/RETAIN PATTERN;input STRING $CHAR40.;IF PRXMATCH(PATTERN,STRING) GT 0 THEN OUTPUT;DATAlines;One number (123)333-4444Two here:(800)234-2222 and (908) 444-2344None here;PROC PRINT DATA=PHONE NOOBS;Title "Listing of Data Set Phone";RUN;/*Program 3: Modifying Program 2 to search for toll-free phone numbers*/***Primary functions: PRXPARSE,PRXMATCH***Other function: MISSING;DATA TolL_FREE;IF _N_ = 1 THEN DORE = PRXPARSE("/\(8(00|77|87)\) ?\d\d\d-\d{4}\b/");***Regular Expression looks for phone numbers of the form:(nnn)nnn-nnnn or (nnn) nnn-nnnn. In addition the firstdigit of the area code must be an 8 and the next twodigits must be either a 00,77,or 87.;IF MISSING(RE) THEN DO;PUT "ERROR IN COMPIliNG REGulAR Expression";Stop;END;END;RETAIN RE;input STRING $CHAR80.;position = PRXMATCH(RE,STRING);IF position GT 0 THEN OUTPUT;DATAlines;One number on this line (877)234-8765No numbers hereOne toll free,one not:(908)782-6354 and (800)876-3333 xxxTwo toll free:(800)282-3454 and (887) 858-1234No toll free here (609)848-9999 and (908) 345-2222;PROC PRINT DATA=TolL_FREE NOOBS;Title "Listing of Data Set TolL_FREE";RUN;/*Program 4: Using PRXMATCH without PRXPARSE (entering the regular Expression directly in the function)*/***Primary functions: PRXMATCH;DATA MATCH_IT;input @1 STRING .;position = PRXMATCH("/\d\d\d/",STRING);DATAlines;liNE 345 IS HERENONE HEREABC1234567;PROC PRINT DATA=MATCH_IT NOOBS;Title "Listing of Data Set MATCH_IT";RUN;/*Program 5: Locating all 5- or 9-digit zip codes in a List of addresses*/***Primary functions: PRXPARSE and PRXSUBSTR***Other functions: SUBSTRN;DATA ZIPCODE;IF _N_ = 1 THEN RE = PRXPARSE("/ \d{5}(-\d{4})?/");RETAIN RE;/*Match a blank followed by 5 digits followed byeither nothing or a dash and 4 digits\d{5} matches 5 digits- matches a dash\d{4} matches 4 digits? matches zero of one of the preceding subExpression*/input STRING .;LENGTH ZIP_CODE $ 10;CALL PRXSUBSTR(RE,STRING,START,LENGTH);IF START GT 0 THEN DO;ZIP_CODE = SUBSTRN(STRING,START + 1,LENGTH - 1);OUTPUT;END;KEEP ZIP_CODE;DATAlines;John Smith12 broad StreetFlemington,NJ 08822Philip JudsonApt #1,Building 7777 Route 730Kerrville,TX 78028Dr. Roger Alan44 Commonwealth Ave.Boston,MA 02116-7364;PROC PRINT DATA=ZIPCODE NOOBS;Title "Listing of Data Set ZIPCODE";RUN;/*Program 6: Extracting a phone number from a text string*/***Primary functions: PRXPARSE,PRXSUBSTR***Other functions: SUBSTR,COMPRESS,and MISSING;DATA EXTRACT;IF _N_ = 1 THEN DO;PATTERN = PRXPARSE("/\(\d\d\d\) ?\d\d\d-\d{4}/");IF MISSING(PATTERN) THEN DO;PUT "ERROR IN COMPIliNG REGulAR Expression";Stop;END;END;RETAIN PATTERN;LENGTH NUMBER $ 15;input STRING $CHAR80.;CALL PRXSUBSTR(PATTERN,LENGTH);IF START GT 0 THEN DO;NUMBER = SUBSTRTRING,LENGTH);(S NUMBER = COMPRESS(NUMBER," ");OUTPUT;END;KEEP NUMBER;DATAlines;THIS liNE DOES NOT HAVE ANY PHONE NUMBERS ON ITTHIS liNE DOES: (123)345-4567 LA DI LA DI LAALSO VALID (123) 999-9999TWO NUMBERS HERE (333)444-5555 AND (800)123-4567;PROC PRINT DATA=EXTRACT NOOBS;Title "Extracted Phone Numbers";RUN;/*Program 7: Using the PRXPOSN function to extract the area code and exchange from a phone number*/***Primary functions: PRXPARSE,PRXMATCH,PRXPOSN***Other functions: SUBSTR;RUN;DATA PIECES;IF _N_ THEN RE = PRXPARSE("/\((\d\d\d)\) ?(\d\d\d)-\d{4}/");/*\( matches an open parenthesis\d\d\d matches three digits\) matches a closed parenthesisb? matches zero or more blanks (b = blank)\d\d\d matches three digits- matches a dash\d{4} matches four digits*/RETAIN RE;input NUMBER $CHAR80.;MATCH = PRXMATCH(RE,NUMBER);IF MATCH GT 0 THEN DO;CALL PRXPOSN(RE,1,AREA_START);CALL PRXPOSN(RE,2,EX_START,EX_LENGTH);AREA_CODE = SUBSTR(NUMBER,AREA_START,3);EXCHANGE = SUBSTR(NUMBER,EX_LENGTH);END;DROP RE;DATAlines;THIS liNE DOES NOT HAVE ANY PHONE NUMBERS ON ITTHIS liNE DOES: (123)345-4567 LA DI LA DI LAALSO VALID (609) 999-9999TWO NUMBERS HERE (333)444-5555 AND (800)123-4567;PROC PRINT DATA=PIECES NOOBS heading=H;Title "Listing of Data Set PIECES";RUN;/*Program 8: Using regular Expressions to read very unstructured data*/***Primary functions: PRSPARSE,PRXPOSN***Other functions: SUBSTR,input;***This program will read every line of data and,for any linethat contains two or more numbers,will assign the firstnumber to X and the second number to Y;DATA READ_NUM;***Read the first number and second numbers on line;IF _N_ = 1 THEN RET = PRXPARSE("/(\d+) +\D*(\d+)/");/*\d+ matches one or more digitsb+ matches one or more blanks (b = blank)\D* matches zero or more non-digits\d+ matches one or more digits*/RETAIN RET;input STRING $CHAR40.;POS = PRXMATCH(RET,STRING);IF POS GT 0 THEN DO;CALL PRXPOSN(RET,START1,LENGTH1);IF START1 GT 0 THEN X = input(SUBSTR(STRING,LENGTH1),9.);CALL PRXPOSN(RET,START2,LENGTH2);IF START2 GT 0 THEN Y = input(SUBSTR(STRING,LENGTH2),9.);OUTPUT;END;KEEP STRING X Y;DATAlines;XXXXXXXXXXXXXXXXXX 9 XXXXXXX 123This line has a 6 and a 123 in it456 789None on this lineOnly one here: 77;PROC PRINT DATA=READ_NUM NOOBS;Title "Listing of Data Set READ_NUM";RUN;/*Program 9: Finding digits in random positions in an input string using CALL PRXNEXT*/***Primary functions: PRXPARSE,PRXNEXT;DATA FIND_NUM;IF _N_ = 1 THEN RET = PRXPARSE("/\d+/");*Look for one or more digits in a row;RETAIN RET;input STRING .;START = 1;Stop = LENGTH(STRING);CALL PRXNEXT(RET,Stop,position,LENGTH);ARRAY X[5];DO I = 1 TO 5 WHILE (position GT 0);X[I] = input(SUBSTR(STRING,LENGTH),9.);CALL PRXNEXT(RET,LENGTH);END;KEEP X1-X5 STRING;DATAlines;THIS 45 liNE 98 HAS 3 NUMBERSNONE HERE12 34 78 90;PROC PRINT DATA=FIND_NUM NOOBS;Title "Listing of Data Set FIND_NUM";RUN;/*Program 10: Demonstrating the PRXPAREN function*/***Primary functions: PRXPARSE,PRXPAREN;DATA PAREN;IF _N_ = 1 THEN PATTERN = PRXPARSE("/(\d )|(\d\d )|(\d\d\d )/");***One or two or three digit number followed by a blank;RETAIN PATTERN;input STRING $CHAR30.;position = PRXMATCH(PATTERN,STRING);IF position GT 0 THEN WHICH_PAREN = PRXPAREN(PATTERN);DATAlines;one single digit 8 heretwo 888 7712345 1234 123 12 1;PROC PRINT DATA=PAREN NOOBS;Title "Listing of Data Set PAREN";RUN;/*Program 11: Demonstrating the PRXCHANGE function*/***Primary functions: PRXPARSE,PRXCHANGE;DATA CAT_AND_MOUSE;input TEXT $CHAR40.;LENGTH NEW_TEXT $ 80;IF _N_ = 1 THEN MATCH = PRXPARSE("s/[Cc]at/Mouse/");*Replace "Cat" or "cat" with Mouse;RETAIN MATCH;CALL PRXCHANGE(MATCH,-1,TEXT,NEW_TEXT,R_LENGTH,Trunc,N_OF_CHANGES);IF Trunc THEN PUT "Note: NEW_TEXT was truncated";DATAlines;The Cat in the hatThere are two cat cats in this line;PROC PRINT DATA=CAT_AND_MOUSE NOOBS;Title "Listing of CAT_AND_MOUSE";RUN;/*Program 12: Demonstrating the use of capture buffers with PRXCHANGE*/***Primary functions: PRXPARSE,PRXCHANGE;DATA CAPTURE;IF _N_ = 1 THEN RETURN = PRXPARSE("S/(\w+ +)(\w+)/ /");RETAIN RETURN;input STRING .;CALL PRXCHANGE(RETURN,STRING);DATAlines;Ron CodyRussell Lynn;PROC PRINT DATA=CAPTURE NOOBS;Title "Listing of Data Set CAPTURE");RUN;
总结

以上是内存溢出为你收集整理的Some examples about perl expression全部内容,希望文章能够帮你解决Some examples about perl expression所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1286800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存