免费注册 查看新帖 |

Chinaunix

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

求助,高手请近来指教一下,谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-11 23:36 |只看该作者 |倒序浏览
我在一个程序中想把 {includetpl:template.html}解析成 {includetpl:%%jhdskdh^dasdas^dadas%%template.html},其中 :%%jhdskdh^dasdas^dadas%%template.html 是由函数  getCmp('template.html') 得出的 (注意:四个%中的部分会根据参数的不同而生成不同的值),我写了如下的处理过程:

  1.        preg_match_all("/" . '{' . 'includetpl:(.+?)' . '}' . '/is', $PString, $tmp);
  2.        foreach($tmp[1] as $v){
  3.            if ($v != '') {
  4.                $PString = str_replace($v,getCmp($v),$PString);
  5.            }
  6.        }
复制代码

虽然勉强能够实现程序功能,总觉得不够优化,请高手指教一下,用 preg_replace 可不可以实现上述程序功能,谢过先

论坛徽章:
0
2 [报告]
发表于 2005-01-12 20:00 |只看该作者

求助,高手请近来指教一下,谢

没搞清楚是个规则...

理论上讲能preg_match的就能preg_replace,我猜你是第二个参数不知道咋写吧,后缀e代表替换结果做为php语句执行..

如 preg_replace("/([a-z]+)/ie", 'md5("$1"', "123abc";

会把abc替换成它的md5 hash,一时没想出什么好例子,纯属演示呵呵

论坛徽章:
0
3 [报告]
发表于 2005-01-14 10:15 |只看该作者

求助,高手请近来指教一下,谢

第二个参数用 /ie ,替换程序运行结果,但是在我下面的程序中,用/ie就会出错

程序如下:


  1.           $PString = preg_replace(
  2.          array('/' . $this->;startLeft . 'includephp:\s*(.+?)' . $this->;startRight . '/is',
  3.                '/' . $this->;startLeft . 'includetpl:\s*(.+?)' . $this->;startRight . '/is',
  4.                ),
  5.          array($this->;startLeft . 'php' . $this->;startRight . ' include_once(\'' . str_replace('\\', '/', realpath('.')) . '/\\1\'); ' . $this->;startLeft . '/php' . $this->;startRight,
  6.                $this->;startLeft . 'php' . $this->;startRight . ' include_once(\'' . $this->;dirs['compiles'] . '\'.$this->;getCmpFile(\'\\1\').\'' .  $this->;cheExt[0] . '\'); ' . $this->;startLeft . '/php' . $this->;startRight
  7.                ),
  8.          $PString);
复制代码


替换前的内容为:

  1. <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">;
  2. {includetpl:header.html}
复制代码


替换后:

  1. <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">;
  2. <?php  include_once('D:/xxx/xxx/xxxx/Compiles/main/'.$this->;getCmpFile('header.html').'.php');  ?>;
复制代码


而我想得到的理想输出为:

  1. D:/xxx/xxx/xxx/Compiles/main/%%71^714^714F4B17%%header.html.php
复制代码


其中 getCmpFile('header.html') = %%71^714^714F4B17%%header.html

如上所说,虽然能够完成替换,但是在结果中还是存在特定的函数,不能完全得到预期结果

帮忙帮忙~~~~~~~~~`

论坛徽章:
0
4 [报告]
发表于 2005-01-18 12:33 |只看该作者

求助,高手请近来指教一下,谢

帖子沉底了,可是问题还没解决,麻烦高手帮忙啊,急~``
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP