免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4648 | 回复: 16
打印 上一主题 下一主题

正则表达式达人帮忙解析语法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-24 17:19 |只看该作者 |倒序浏览
perl –pi.bak –e ‘s/(_CHIN[AE])(\d+)/$1@{[$2+52]}/’  test.txt

运行前 test.txt
_CHINA1
_CHINA2
_CHINA3
_CHINE1
_CHINE2
_CHINE3

运行后 test.txt
_CHINA53
_CHINA54
_CHINA55
_CHINE53
_CHINE54
_CHINE55

对替换中的@{[$2+52]}非常的不解.  @, {}, [] 的作用是什么.
另外替换中需要计算$2+52, 为什么不用s///e的.
希望perl 正则表达式达人解惑. 谢谢

论坛徽章:
0
2 [报告]
发表于 2011-01-24 17:39 |只看该作者
@{[。。。]}是perler经常使用的一种技巧,你会遇到的

论坛徽章:
0
3 [报告]
发表于 2011-01-25 10:17 |只看该作者
回复 2# yiten


    呵呵,好人做到底,帮忙讲解一下呗。

论坛徽章:
0
4 [报告]
发表于 2011-01-25 10:31 |只看该作者
回复 2# yiten


你也可以用e,perl的特点就是你有很多方法可以实现嘛
@{[...]}可以使得perl强制对...进行运算,而不是当做一个字符串直接打出来。你有时可能想方便的在字符串内插方法调用或者其他的运算。
你可以试一下这2个有什么区别
print "hello, 1 + 1"
print "hello, @{[1+1]}"
还有,你有时候想这样:
print "I am get_my_name()",你想内插一个方法调用,你很郁闷为什么不行呢,是的,就这样用:
print "I am @{[get_my_name()]}"

论坛徽章:
0
5 [报告]
发表于 2011-01-25 10:37 |只看该作者
[] 是匿名引用,里面的表达式可以运算
@{} 就是解引用,最后得到表达式的值,而不是引用的地址

论坛徽章:
0
6 [报告]
发表于 2011-01-25 10:37 |只看该作者
回复 4# yiten


    好人呐,好人。顶

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2011-01-25 11:39 |只看该作者
就是引用啊。

相当于print "This is a @array"。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2011-01-25 11:41 |只看该作者
回复 5# __lxmxn__


    解释到位

论坛徽章:
0
9 [报告]
发表于 2011-01-27 13:17 |只看该作者
谢谢各位大大解惑.
perl有时就这样,让人觉得顿时无从下手.

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
10 [报告]
发表于 2011-01-27 13:30 |只看该作者
本帖最后由 zhlong8 于 2011-01-27 13:33 编辑
谢谢各位大大解惑.
perl有时就这样,让人觉得顿时无从下手.
sellie 发表于 2011-01-27 13:17



    这个用法我也是头一次注意到,不过我知道正则替换后面应该是个字符串,@{ } 表示解引用, [] 表示引用,看到这个用法最多会“哦,原来里面还可以计算表达式”绝不会说无从下手。基础不牢固就是不牢嘛,找借口解决不了问题滴
    不知道这个方法前我可能会用 s///e 在后面用字符串连接
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP