免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: beginner-bj
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2010-11-25 11:52 |只看该作者
本帖最后由 alabos 于 2010-11-25 13:00 编辑

$_  = '000230203400';

print "$_\n";
s/(?<=[1-9])[0](?=[1-9])/A/g;
print ;


输出:

00023000203400
00023A2A3400

论坛徽章:
0
12 [报告]
发表于 2010-11-25 12:58 |只看该作者
本帖最后由 alabos 于 2010-11-25 13:02 编辑

$_  = '00023000203400';

print "$_\n";

1 while (s/(?<=[^0])0(0*?)(?=[^0])/A$1/g );

print ;


输出:
00023000203400
00023AAA2A3400

{:3_187:}

这个是一个新学到的方法。 嘿嘿,

看来书,还是有多翻才有用!

刚刚学会断言 (?<=)  (?=) 这种方法, 显摆一下。

论坛徽章:
0
13 [报告]
发表于 2010-11-25 13:28 |只看该作者
本帖最后由 wfnh 于 2010-11-25 13:31 编辑
就是想一句正则搞定~
黑色阳光_cu 发表于 2010-11-25 11:46


我也来一句···
$str=~s/(?<!^)0(?!$)/A/g;

论坛徽章:
0
14 [报告]
发表于 2010-11-25 13:53 |只看该作者
楼上的,结果不对。

不过思路又开阔了。

论坛徽章:
0
15 [报告]
发表于 2010-11-25 15:22 |只看该作者
楼上的,结果不对。

不过思路又开阔了。
alabos 发表于 2010-11-25 13:53



    其实你12楼的写法也是依靠对^和$的判断实现的~
这样可能就可以了:

my $str='000230203400';
$str=~s/(?<=[^\^0*])0(?!(0*$))/A/g;
print $str;

论坛徽章:
0
16 [报告]
发表于 2010-11-25 15:26 |只看该作者
其实你12楼的写法也是依靠对^和$的判断实现的~
这样可能就可以了:

my $str='000230203400'; ...
x9x9 发表于 2010-11-25 15:22



   
你这个正则不对

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
17 [报告]
发表于 2010-11-25 16:53 |只看该作者
其实你12楼的写法也是依靠对^和$的判断实现的~
这样可能就可以了:

my $str='000230203400'; ...
x9x9 发表于 2010-11-25 15:22


如果0002302003400就不对了。

论坛徽章:
0
18 [报告]
发表于 2010-11-25 17:58 |只看该作者
你这个正则不对
黑色阳光_cu 发表于 2010-11-25 15:26



    是有问题,好像向前断言不允许用正则啊,向后可以~

论坛徽章:
0
19 [报告]
发表于 2010-11-25 18:02 |只看该作者
本帖最后由 wfnh 于 2010-11-25 18:04 编辑

回复 14# alabos

哦··看错需求了·····
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP