+ -
当前位置:首页 → 问答吧 → 零宽断言替换问题

零宽断言替换问题

时间:2010-11-24

来源:互联网

echo 023020340 |perl -pe 's#(?<=\d)0(?=\d)#A#g'
可将023020340替换成023A2A340,即:头尾的一个0不变,中间的0都替换成A。

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

作者: beginner-bj   发布时间: 2010-11-24

  1. $ echo 000230203400 |perl -pe 's#0(?!0*$)#A#g'
  2. AAA23A2A3400
  3. $
复制代码
只写出不替换尾部的正则,头部的不会

作者: beginner-bj   发布时间: 2010-11-24

  1. my $str = "000230203400";
  2. $str =~ s/((?<=^)0+)?\K(0)?(?!0*$)/defined $2 && "A"/eg;
  3. warn $str;
复制代码

作者: 黑色阳光_cu   发布时间: 2010-11-25