SAS中的正则表达式点

时间:2015-04-21 14:55:28

标签: regex sas

我在此字段中是新用户,并尝试使用prxmatchrxmatch来匹配某些字符串。

模式为a.,匹配超过2个字符的字符串,a不是最后一个字符。

我运行prxmatch('/a./', 'a')rxmatch('/a./', 'a'),结果应为0.但系统会返回1。

那么在这种情况下如何才能获得0?

1 个答案:

答案 0 :(得分:1)

如果您为此编写MCVE,则无法匹配。

data test;
  x='a';
  rc=prxmatch('~a.~',x);
  put x= rc=;
run;

但是,如果x不是长度1,它将匹配!

data test;
  length x $5;
  x='a';
  rc=prxmatch('~a.~',x);
  put x= rc=;
run;

为什么?

因为在SAS中,字符串不是varchar,所以它们是char。它们的空间将其余部分填充到其全长。所以你需要做任何一次

data test;
  length x $5;
  x='a';
  rc=prxmatch('~a[^ ]~',x);
  put x= rc=;
run;

或者更好,

data test;
  length x $5;
  x='a';
  rc=prxmatch('~a.~',trim(x));
  put x= rc=;
run;

(注意,我使用~作为我的正则表达式分隔符 - 您可以自由地使用斜杠或任何其他字符,这没有任何区别。)

相关问题