免费注册 查看新帖 |

Chinaunix

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

正则表达式无法生效 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-24 10:37 |只看该作者 |倒序浏览
http://www.a.com//file//index.html 转换成正常的, 有人提供如下方法:
@urls=qw(
        http://www.a.com/file/in.html
        http://www.a.com//big-dash-dash/in.html
        );

foreach (@urls){
  m#^[^/]//#;                 
  s#\G//#/#g;
  print $_,"\n";
}


但我自己运行都不好用, 而且我觉得应该吧 m#^[^/]//# 写成 m#^[^/]+?//#, 也不行.
是什么原因呢?

论坛徽章:
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
2 [报告]
发表于 2009-12-24 11:17 |只看该作者
foreach (@urls) {
  s#(?<!:)//#/#g;
  print "$_\n";
}

论坛徽章:
0
3 [报告]
发表于 2009-12-24 15:12 |只看该作者
黑哥的方法是生效的,  
s#([\-\.\w]+)//#$1/#g; 也可以. (作者提供的另一種方法)

但按作者的意圖, 他想在匹配到第一個//之後, 再把後面的//替換掉.
但是\G好像起不到作用.

我现在郁闷的是, 我不知道是他勘误, 还是我运行的环境不对头, 而且, 按他的思路, 我看他程序都不对.

[ 本帖最后由 wind_ch 于 2009-12-24 15:15 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-12-25 17:16 |只看该作者
Happy Christmas! 並且拿鏈接頂一下
http://stason.org/TULARC/webmaster/myfaq.html#2

论坛徽章:
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
5 [报告]
发表于 2009-12-25 17:26 |只看该作者

回复 #3 wind_ch 的帖子

那样写肯定是错误的嘛。

要修改。

论坛徽章:
0
6 [报告]
发表于 2009-12-25 18:00 |只看该作者
我改成自認為正確的也不行.

"吧 m#^[^/]//# 写成 m#^[^/]+?//#, 也不行."

另外上面給的鏈接, 新人可以學一哈.

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
7 [报告]
发表于 2009-12-25 18:03 |只看该作者
原帖由 wind_ch 于 2009-12-24 15:12 发表
黑哥的方法是生效的,  
s#([\-\.\w]+)//#$1/#g; 也可以. (作者提供的另一種方法)

但按作者的意圖, 他想在匹配到第一個//之後, 再把後面的//替換掉.
但是\G好像起不到作用.

我现在郁闷的是, 我不知道是他 ...


我运行出来的结果:
http://www.a.com/file/in.html
http://www.a.com//big-dash-dash/in.html

是没改变

论坛徽章:
0
8 [报告]
发表于 2009-12-25 18:13 |只看该作者
其实黑哥的方法也不错了, 而且还好记。
但是作者提供的两种方法中说一个比另一个的效率高很多。而那个高效的方法我却不能跑!

黑哥(s#(?<!: )//#/#g; )
=> timethis 50000: 17 wallclock secs ( 2.28 usr +  1.27 sys =  3.55 CPU) @ 14084.51/s (n=50000)
不能跑的(m#^[^/]//#;                 
             s#\G//#/#g;  )
=> timethis 50000: 15 wallclock secs ( 1.35 usr +  1.08 sys =  2.43 CPU) @ 20576.13/s (n=50000)
作者另一个(s#([\-\.\w]+)//#$1/#g; )
=> timethis 50000:  9 wallclock secs ( 2.38 usr +  0.68 sys =  3.06 CPU) @ 16339.87/s (n=50000)

[ 本帖最后由 wind_ch 于 2009-12-25 21:04 编辑 ]

论坛徽章:
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
9 [报告]
发表于 2009-12-26 19:16 |只看该作者

回复 #8 wind_ch 的帖子

应该是这样才对吧:
@urls=qw(
http://www.a.com/file/in.html
http://www.a.com//big-dash-dash/in.html
http://www.a.com//big-dash-dash//in.html
);

foreach (@urls) {            
    s#\G//#/# while m#/[^/]+#g;
    print $_,"\n";
}

[ 本帖最后由 blackold 于 2009-12-26 19:24 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-12-26 23:19 |只看该作者
感謝黑哥!
但我感覺還是有些疑問.
待我把正則表達式好好搞一下, 再來請教.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP