全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1529 3
2010-05-20
data test;
input x$;
cards;
abc,def
man,feman
;
run;
data b;
set test;
re=PRXPARSE("/(\w+),(\w+)/");
id=prxmatch(re,x);
t=prxparen(re);
call prxposn(re,t,pos,len);
r0=substr(x,pos,len);
r1=PRXPOSN(re,1,x);
r2=PRXPOSN(re,2,x);
run;

问题为啥t=prxparen(re)搜索到的都是2,也就是逗号后面的(\w+)/的引用??这样在r0就输出不了和re匹配的内容了,当然如果把("/(\w+),(\w+)/")改成("/((\w+),(\w+))/");就没有问题了,但是我不明白在上面程序中的prxparen这个命令到底是按什么搜索的,其实我觉得它应该搜到的是0!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-5-20 17:00:39
试了一下
匹配成功而且正则表达式中含括号,prxparen返回正则表达式中最后一个匹配上的模式(括号中)的位置数
匹配成功但正则表达式不含括号,返回0
匹配不成功,返回值缺失
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-20 18:02:22
第一个re:"/(\w+),(\w+)/":
正如楼上所说prxparen返回最后一个匹配内容所在的序号,因此对于第一个RE的模式,分割符号为",",最后一个匹配的即是逗号后的第二个括号,因此返回2。

第二个re:"/((\w+),(\w+))/"
返回3是因为,这个re中还括了一层,以第一个为例,所以第一个匹配到的是abc,def,第二个匹配到的是abc,第三个即最后一个匹配到的是def

所以起结果最后一个匹配到的都是def,即r0,但两个匹配的数量是不同的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-5-21 08:43:20
哦,谢谢啦,好像明白了,我再去回顾一下
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群