我在此字段中是新用户,并尝试使用prxmatch
和rxmatch
来匹配某些字符串。
模式为a.
,匹配超过2个字符的字符串,a
不是最后一个字符。
我运行prxmatch('/a./', 'a')
和rxmatch('/a./', 'a')
,结果应为0.但系统会返回1。
那么在这种情况下如何才能获得0?
答案 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;
(注意,我使用~
作为我的正则表达式分隔符 - 您可以自由地使用斜杠或任何其他字符,这没有任何区别。)