免费注册 查看新帖 |

Chinaunix

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

一个perl正则替换和位运算问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-28 15:46 |只看该作者 |倒序浏览
举例:
abc,dfg,0x1234;
abc,fgh,tyu;

我需要把fgh替换成0x1234的反。
我把0x1234匹配到了$2,替换时直接写(~$2 & 0xffff)。perl直接把括号里的这些给放到那里了。
我想要的是他的结果。不知道如何替换?

哪位大侠帮帮我!谢谢了

论坛徽章:
0
2 [报告]
发表于 2011-04-28 17:45 |只看该作者
路过的大哥大姐,帮忙指导下

论坛徽章:
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
3 [报告]
发表于 2011-04-28 18:13 |只看该作者
s///e 用 e 修饰符

论坛徽章:
0
4 [报告]
发表于 2011-04-30 16:00 |只看该作者
回复 3# zhlong8

谢谢你的帮助。我查了下/e可以把被替换的部分作为一个运算符。我试了下,在我那里还是有问题。
原因是我的替换部分除了这个要取反这个运算外还有其他不需要运算的部分。
例如,替换部分是这样的
Write,(~$1 & 0xffff),$3;
我只需要括号内的那些进行运算,其他不是运算。
我加了/e修饰符后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
5 [报告]
发表于 2011-04-30 16:39 |只看该作者
回复  zhlong8

谢谢你的帮助。我查了下/e可以把被替换的部分作为一个运算符。我试了下,在我那里还是有 ...
rettylee 发表于 2011-04-30 16:00



    /e 会求值,Write,(~$1 & 0xffff),$3; 求值当然有问题,perl 不明白 Write 是什么。 应该是 s//'Write ' . (~$1 & 0xffff) . $3/e

论坛徽章:
0
6 [报告]
发表于 2011-05-02 15:31 |只看该作者
/e 会求值,Write,(~$1 & 0xffff),$3; 求值当然有问题,perl 不明白 Write 是什么。 应该是 s//' ...
zhlong8 发表于 2011-04-30 16:39



谢谢zhlong8的回复。我按照你说的在不需要运算的部分加了“”(因为我立面还有转义字符),没想到还是有问题。
Argument "乱七八糟的东西"is not numeric in bitwise and(&)。。。。。我想这个意思应该是在运算的里面有不是数字的东西。
我把上述脚本只去掉可选修饰符/e,其他不动,出来替换的部分我看下是数字(16进制数)例如:".(~0x0020) & (0xffff)."
我试了下16进制数在~ 和 & 运算 ,例如:
$temp=0x0001;
$num=(~$temp) & (0xffff) ;
print $num;
结果是正确的十进制数。
不知道我替换时的那个错误是怎么回事?
谢谢你再指导你!

论坛徽章:
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
7 [报告]
发表于 2011-05-02 16:12 |只看该作者
谢谢zhlong8的回复。我按照你说的在不需要运算的部分加了“”(因为我立面还有转义字符),没想到还是 ...
rettylee 发表于 2011-05-02 15:31



      '0x1234' 这样的字符串 Perl 是不能自动转化成正确的数字的,用 hex($2) & 0xffff

论坛徽章:
0
8 [报告]
发表于 2011-05-03 14:08 |只看该作者
回复 7# zhlong8


    十分感谢zhlong8的热心和耐心的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP