免费注册 查看新帖 |

Chinaunix

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

追问-如何追踪模式替换的位置??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-08 14:59 |只看该作者 |倒序浏览
前几天发过一贴,询问如何追踪,当晚就有大神解答,甚是感动,
http://bbs.chinaunix.net/thread-4165577-1-1.html

研究发现这个方法是追踪句柄的位置,随着句柄逐步替换。

现在想问,如果一大段字符已经放入字符串$foo了呢?

搜索网络,发现函数pos()可以在模式匹配m//g;时反馈匹配的位置 $position = pos($foo);

但问题是对于s///;,咋就没有这样记录当前位置的函数呢?

有哪位大神知道,求解答~

论坛徽章:
0
2 [报告]
发表于 2015-01-11 00:04 |只看该作者
@b4and5

能再教我几招吗?哈哈

论坛徽章:
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
3 [报告]
发表于 2015-01-11 20:48 |只看该作者
回复 1# 死水站

study ...

$ perldoc perlretut
NAME
    perlretut - Perl regular expressions tutorial
    ...

$ perldoc perlre
NAME
    perlre - Perl regular expressions
    ...

论坛徽章:
0
4 [报告]
发表于 2015-01-12 14:18 |只看该作者
你的意思是说要仔细看一下正则这一块,会有收获?

回复 3# jason680


   

论坛徽章:
0
5 [报告]
发表于 2015-01-12 16:49 |只看该作者
回复 4# 死水站

我也不知道哦...为什么会有这种需求呢...?
用匹配捕获不行吗?

   

论坛徽章:
0
6 [报告]
发表于 2015-01-12 17:22 |只看该作者
回复 5# b4and5

比如还拿上次的例子来说明:
可以这样试下:

my $content = "

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……

   1balbala……
   2balbala……
   3balbala……
";

$content =~ /三(.*)一/sm;

##then do some operation with $1 ###


这样的话捕获进$1的内容就应该是你实际想替换的部分,再对$1操作试试。
公司的linux不支持中文,没能验证。

论坛徽章:
0
7 [报告]
发表于 2015-01-12 21:20 |只看该作者
谢谢啊,哈哈。

先说一下我的想法,就是需要你的那块“/三(.*)一/”匹配出来的字段能够直接在整个$content里面被修改操作;而不是先提取出来,比如$temp = $1;然后修改$temp,然后再把$temp放回$content。

所以呢,你上次介绍的追踪句柄,就是有这个效果,从句柄读取一段文字判断,满足条件就修改输出,不满足条件就直接输出,整体来说就是用句柄从头到尾扫描了一遍,对吧?这就是我说的那个意思。

但是问题是很多时候文件已经读出来放到某个$foo里了,这时候肯定是就变成对$foo的匹配和替换咯。

m//;里的pos()函数挺好的,问题是不能在s///;时候用,郁闷。

回复 6# b4and5


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP