懒惰匹配
$strbuff = "PREFIX|aaaa|bbbb|gggg|cccc|dddd";
$strbuff =~ /.+\|(a.+?)\|b(.+?)\|(c.+?)\|(d.+?)$/;
print "a is:".$1."\n";
print "b is:".$2."\n";
print "c is:".$3."\n";
print "d is:".$4."\n";
为什么$2的值是bbb|gggg? 我希望$2=bbb。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
复制代码
你RE中少了个 \|g(.+?)
/\|(a+?)\|(b+?)\|(c+?)\|(d+?)$/
这样的话, $1 ~ $4 都没有值了
回复 3# zhlong8
我就是要处理|b和|c中可能出现其他数据的情况, 例如|gggg。
请问是不是可以跳过|gggg?
本帖最后由 albertd 于 2011-04-14 15:16 编辑
$strbuff =~ /\|(.+?a)\|(.+?b)\|.*\|(.+?c)\|(.+?d)$/;
复制代码
行了, 谢谢!!!!
$ cat split.pl
$strbuff = "PREFIX|aaaa|bbbb|gggg|cccc|dddd";
@data = (split('\|', $strbuff))[1,2,4,5];
print "@data\n";
$ perl split.pl
aaaa bbbb cccc dddd
谢谢!