正则表达式模式修饰词

在介绍修饰符之前,首先介绍一下在Perl中的两个基本函数:

match( $string, $pattern );
subst( $string, $pattern, $replacement );

即匹配和替换,缩写为m//s///(或s###),对应到SAS中的函数就是PRXMATCHPRXCHANGE,即m/PATTERN/s/PATTERN/REPLACEMENT/(或s#PATTERN#REPLACEMENT#)。注意其中的字母m(表示开始匹配的操作)可以省略而字母s不能省略。模式修饰词也称为选项,是指放在m//s///最后一个分隔符后的一个字母,例如字母/o/i/s/m/g。由于SAS并没有包含整个Perl语言,所以SAS中只支持部分的模式修饰词,下面简单介绍一下两个常用的修饰符:

  1. /o,只编译表达式一次,这样可提高效率。如果我们将表达式写在函数PRXPARSE中,如下所示:
    re=prxparse('/(.+?)\s+(\d+)/');
    
    这种写法SAS只编译表达式一次,等同于下面这种写法:
    pattern='/(.+?)\s+(\d+)/o'; 
    re=prxparse(pattern);
  2. /i,忽略字母大小写,如下面的表达式的第一个组,可以成功匹配字符串PERL也可以匹配字符串Perl。
    pattern='/(Perl)\s+(\d+)/io'; 
    re=prxparse(pattern);

上面有提到另一种替换的操作符:s###s#PATTERN#REPLACEMENT#),下面介绍一下这个操作符的用处。我们知道在表达式中如果要匹配一些元字符的时候,如/, (, .,则需要在元字符前面加一个转义符\来屏蔽元字符的特殊含义以达到匹配元字符本身的目的。而当PATTERNREPLACEMENT中含有多个元字符,则需要写多个转义符\,这样就会有点麻烦。所以这种情况就可用s###s#PATTERN#REPLACEMENT#),因为在这种操作符中可以不用使用转义符。如下例:

path=prxchange("s/.*\/(.*)\/\w*\.jpg/\/home\/cn\/picture\/$1\/Cheshire_cat.jpg/", 1, "http://www.xianhuazeng.com/cnuploads/2015/Cheshire_cat.jpg");
path=prxchange("s#.*/(.*)/\w*.jpg#/home/cn/picture/$1/Cheshire_cat.jpg#", 1, "http://www.xianhuazeng.com/cnuploads/2015/Cheshire_cat.jpg");
曾宪华 /
本文采用 署名-非商业性使用-相同方式共享 3.0许可协议 属于 程序人生 分类, 被贴了 Modifier Regular Expression 正则表达式 书签

上一篇 SAS数据集中重复记录问题
下一篇 Linux命令批量修改文件名字及内容