免费注册 查看新帖 |

Chinaunix

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

零宽断言替换问题 [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-24 22:49 |只看该作者 |倒序浏览
echo 023020340 |perl -pe 's#(?<=\d)0(?=\d)#A#g'
可将023020340替换成023A2A340,即:头尾的一个0不变,中间的0都替换成A。

那如何将000230203400替换成00023A2A3400呢?即:头尾的任意个0不变,中间的0都替换成A。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2010-11-24 23:10 |只看该作者
  1. $ echo 000230203400 |perl -pe 's#0(?!0*$)#A#g'
  2. AAA23A2A3400
  3. $
复制代码
只写出不替换尾部的正则,头部的不会

论坛徽章:
0
3 [报告]
发表于 2010-11-25 00:59 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-11-25 01:31 编辑
  1. my $str = "000230203400";
  2. $str =~ s/(?:^0+)?\K(0)?(?!0*$)/defined $1 && "A"/eg;
  3. warn $str;
复制代码
  1. my $str = "000230203400";
  2. $str =~ s/([^0].+?[^0])(?=0*$)/(local $_ = $1) =~ s\/0\/A\/g; $_/e;
  3. warn $str;
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2010-11-25 06:22 |只看该作者
第二种写法能达到目的,谢谢

论坛徽章:
0
5 [报告]
发表于 2010-11-25 09:44 |只看该作者
第二种写法能达到目的,谢谢
beginner-bj 发表于 2010-11-25 06:22



   
第一种写法5.10起可用

论坛徽章:
0
6 [报告]
发表于 2010-11-25 10:55 |只看该作者
我也来一个 试试:
                 perl -e '$str=q/000230203400/;$str=~s/(?<=[^0])0(?=[^0])/A/g;print $str;'

论坛徽章:
0
7 [报告]
发表于 2010-11-25 10:57 |只看该作者
我也来一个 试试:
                 perl -e '$str=q/000230203400/;$str=~s/(?
liyangole 发表于 2010-11-25 10:55



   
这个有bug~~,如果中间的0是几个连续呢?

论坛徽章:
0
8 [报告]
发表于 2010-11-25 11:25 |只看该作者
我在想,用环视能不能做到呢?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2010-11-25 11:40 |只看该作者
这个有bug~~,如果中间的0是几个连续呢?
黑色阳光_cu 发表于 2010-11-25 10:57


果真如此.....何必把问题复杂化
perl -e '$str=q/00023002003400/;($s,$m,$e)=$str=~m/^(0*)(.+?)(0*)$/;$m=~s/0/A/g;print "$s$m$e\n";'

论坛徽章:
0
10 [报告]
发表于 2010-11-25 11:46 |只看该作者
果真如此.....何必把问题复杂化
perl -e '$str=q/00023002003400/;($s,$m,$e)=$str=~m/^(0*)(.+?)(0* ...
jason680 发表于 2010-11-25 11:40





就是想一句正则搞定~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP