和我的PrxMatch一样,都是很简单的宏,就是用正则表达式替换指定的字符串
- %macro PrxChange(InputString,PrxString);
- /**********************************************************************/
- /* 此宏利用正则表达式的方法替换原始字符串的匹配子串为目标子串。其中, */
- /* InputString是原始字符串;PrxString是指定子串的正则表达式,注意正则 */
- /* 表达式要用/.../符号括起来。 */
- /* */
- /* 最终原始字符串中的匹配子串替换为目标子串。注意用于替换子串的正则表 */
- /* 达式形如:s/SourceString/TargetString/ */
- /* */
- /* Created on 2012.8.6 */
- /* Modified on 2012.8.6 */
- /**********************************************************************/
- %local PrxStringID RegRt;
- %let RegRt=0;
- %let PrxStringID=%SYSFUNC(PRXPARSE(&PrxString));
- %if &PrxStringID GT 0 %then %do;
- %let RegRt=%SYSFUNC(PRXCHANGE(&PrxStringID, -1, &InputString)); /* -1表示全部替换 */
- %end;
- %syscall PrxFree(PrxStringID);
- %str(&RegRt) /* 最后不需要加分号 */
- %mend;
- %macro Demo();
- /* replace the matching string to target string */
- %let zip=%PrxChange(InputString=Jones Fred,PrxString=s/(\w+) (\w+)/$2 $1/);
- %put &zip;
- %mend;


雷达卡



京公网安备 11010802022788号







