免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cnmtchbgs
打印 上一主题 下一主题

如何忽略双引号中的分割符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-04 14:31 |显示全部楼层 |倒序浏览
有这么一个例子
ab:123,bc:"333,444",cd:456
用,作为分割符,分割出来希望得到是
ab:123
bc:"333,444"
cd:456
这样的效果,忽略双引号中间的分隔符。而不是
ab:123
bc:"333
444"
cd:456
请教各位大侠如何实现!

论坛徽章:
0
2 [报告]
发表于 2011-01-04 15:18 |显示全部楼层
楼上的方法也许能行,不过花脸太多,有碍阅读。
经过试验发现使用Text:arseWords这个模块,使用quotewords这个函数可以做到,代码如下:
use Text:arseWords;

$str1='ab:123,bc:"333,444",cd:456';

my @str=quotewords(",", 1, $str1);

其中quotewords函数,参数2中 1 代表不去除"号,如果改为零,代表去除引号。

论坛徽章:
0
3 [报告]
发表于 2011-01-04 15:57 |显示全部楼层
回复 6# meihuaqi


    我试过了,你的这串代码,跑不起来,报错如下:
'$)' is not recognized as an internal or external command,

论坛徽章:
0
4 [报告]
发表于 2011-01-04 16:11 |显示全部楼层
回复 13# meihuaqi


    不知道你调试过没有,我拿你这个最新的代码试验了一下,同样的错误。很奇怪的,难道跟操作系统有关,我在win vista下面测试的

论坛徽章:
0
5 [报告]
发表于 2011-01-04 16:17 |显示全部楼层
回复 13# meihuaqi


    放到perl脚本文件里面执行,结果是正确的,我研究一下这两者的区别。

论坛徽章:
0
6 [报告]
发表于 2011-01-04 16:19 |显示全部楼层
回复 16# meihuaqi


    放在文件中执行是没有问题的,这个就有意思了

论坛徽章:
0
7 [报告]
发表于 2011-01-04 16:38 |显示全部楼层
回复 16# meihuaqi


    同上,我也不明白这句话的具体含义,只知道是非贪婪匹配。

论坛徽章:
0
8 [报告]
发表于 2011-01-04 18:17 |显示全部楼层
回复 16# meihuaqi


    果然是高,$_= "ab:123,bc:\"333,444\",cd:456"; while(/\w+"?.*?(?(1)"(?=,|$)/g){print $&,"\n";}这句话我研究了很久也没搞明白,特别是(?(1)"是什么意思,请指教!

论坛徽章:
0
9 [报告]
发表于 2011-01-04 18:17 |显示全部楼层
回复 16# meihuaqi
  1.     果然是高,$_= "ab:123,bc:\"333,444\",cd:456"; while(/\w+:(")?.*?(?(1)")(?=,|$)/g){print $&,"\n";}这句话我研究了很久也没搞明白,特别是(?(1)")是什么意思,请指教!
复制代码

论坛徽章:
0
10 [报告]
发表于 2011-01-04 20:24 |显示全部楼层
(?(1)")用于判断成对出现的匹配
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP