楼主: wxc_orc
1344 3

[原创博文] 求助:prxparen [推广有奖]

  • 0关注
  • 1粉丝

大专生

60%

还不是VIP/贵宾

-

威望
0
论坛币
72 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
5847 点
帖子
39
精华
0
在线时间
49 小时
注册时间
2008-3-2
最后登录
2016-8-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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!!!
二维码

扫码加我 拉你入群

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

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

关键词:aren ARE PrxMatch RXPARSE SUBSTR

回帖推荐

yatming 发表于3楼  查看完整内容

第一个re:"/(\w+),(\w+)/": 正如楼上所说prxparen返回最后一个匹配内容所在的序号,因此对于第一个RE的模式,分割符号为",",最后一个匹配的即是逗号后的第二个括号,因此返回2。 第二个re:"/((\w+),(\w+))/" 返回3是因为,这个re中还括了一层,以第一个为例,所以第一个匹配到的是abc,def,第二个匹配到的是abc,第三个即最后一个匹配到的是def 所以起结果最后一个匹配到的都是def,即r0,但两个匹配的数量是不同的

本帖被以下文库推荐

沙发
guoluo 发表于 2010-5-20 17:00:39 |只看作者 |坛友微信交流群
试了一下
匹配成功而且正则表达式中含括号,prxparen返回正则表达式中最后一个匹配上的模式(括号中)的位置数
匹配成功但正则表达式不含括号,返回0
匹配不成功,返回值缺失

使用道具

藤椅
yatming 发表于 2010-5-20 18:02:22 |只看作者 |坛友微信交流群
第一个re:"/(\w+),(\w+)/":
正如楼上所说prxparen返回最后一个匹配内容所在的序号,因此对于第一个RE的模式,分割符号为",",最后一个匹配的即是逗号后的第二个括号,因此返回2。

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

所以起结果最后一个匹配到的都是def,即r0,但两个匹配的数量是不同的
已有 1 人评分热心指数 收起 理由
crackman + 1 好积极

总评分: 热心指数 + 1   查看全部评分

使用道具

板凳
wxc_orc 发表于 2010-5-21 08:43:20 |只看作者 |坛友微信交流群
哦,谢谢啦,好像明白了,我再去回顾一下

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 17:25