我使用了(很多)prx函数(Perl正则表达式函数),但是在某些情况下,我在宏函数中使用它们,并将一些东西作为参数传递给搜索,例如。
%macro test(exp=);
proc sql noprint;
select file
into :_input_file trimmed
from folder_content
where prxmatch("/&exp.$/oi", strip(file))
;
quit;
%mend test
在大多数情况下,这是可行的,除非exp
的值包含PRX元字符(例如/或括号)
最好的做法是对这些字符进行转义,但这对用户不友好。假设我想搜索一个文件/home/user/file.txt
,斜线会导致宏失败,而我应该传递值\/home\/user\/file.txt
在实现我自己的转义函数之前,我想确保它不存在,但是到目前为止我还没有找到它
我期望一个原生SAS函数将任何文本值转换为PRX函数中的“即用”值
3条答案
按热度按时间9njqaruj1#
使用除/之外的东西
arknldoa2#
没有像你要求的功能(我甚至不确定我能理解这样的功能将被期望做什么)。
但对于你的例子,只是想把值当作一个字符串(即不是一个实际的正则表达式),那么就没有太多需要发生的事情。
如果你有一个名为EXP的宏变量
您可以将其转换为可在WHERE子句中使用的内容
这将创建:
px9o7tmv3#
/
是用于匹配的隐式m/
。m
后面的第一个字符是表达式 bounder。因此,请使用初始字符,例如#
。"#&exp.$#oi"
-解析的&exp
中的任何/
都将被视为文字/
将正则表达式模式与宏混合使用可能会非常令人沮丧,并且似乎是一个无休止的逃避现实的陷阱。考虑将您的模式视为数据,并将它们连接到所关注的数据集。奖金不是宏。