首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在php中用包含文件替换字符串中的文本

如何在php中用包含文件替换字符串中的文本
EN

Stack Overflow用户
提问于 2012-01-07 01:58:21
回答 4查看 2K关注 0票数 0

我想知道如何将php字符串中的一些文本替换为包含或类似的内容。

这是我的示例字符串:我有一个字符串"bla {{ module:projects,id=1 }} bla bla“

我希望找到{{ module:projects,id=1 }}并将其包含在字符串中的位置(‘projects.php?id=1’);中。

我该怎么做呢?

如果我可以这样做,但我不能让它从字符串中执行php,那么另一种方法是"bla bla bla“

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-07 02:55:14

使用preg_replace:

代码语言:javascript
复制
$string = '{{ module:projects,id=1 }}';
$string = preg_replace('/{{ module:([^,]+),id=([0-9]+) }}/', 'include(\'$1.php?id=$2\')', $string);
// $string == include('projects.php?id=1')

注意:您实际上不能包含在末尾带有查询字符串的文件。PHP查找名为'projects.php?id=1‘的文件。

要获取文件并实际包含它,请执行以下操作:

代码语言:javascript
复制
preg_match_all('/{{ module:([^,]+),id=([0-9]+) }}/', $string, $matches);
foreach ($matches[1] as $key => $filename) {
    // set $id before including the file. you could optionally set $_GET['id'].
    $id = $matches[2][$key];
    include($filename . '.php');
}

支持多个参数。与Matmarbon相似,但更紧凑,不假定参数值将符合\w,不转义值,但间距(/s*)的变化空间较小。

代码语言:javascript
复制
preg_match_all('/{{ module:([^,]+)((,[^=]+=[^,}]+)*) }}/', $string, $matches);
foreach ($matches[1] as $key => $filename) {
    foreach (explode(',', trim($matches[2][$key], ', ')) as $vars) {
        list($k, $v) = explode('=', $vars);
        $_GET[$k] = $v;
    }
    // then this:
    include($filename . '.php');
    // or, to replace content:
    ob_start();
    include($filename . '.php');
    $contents = ob_get_contents();
    ob_end_clean();
    $string = str_replace($matches[0][$key], $contents, $string);
}
票数 3
EN

Stack Overflow用户

发布于 2012-01-07 02:03:22

我认为您可以使用preg_match来实现这一点,但为了避免创建规则的麻烦,我将使用explode()来剪切字符串的不同部分。

按以下顺序剪切字符串:

  1. explode($string, "{{")并获取数组($array[1])
  2. explode($result, "}}")中的第二个元素,并获取第一个element
  3. explode($result, ":")并获取第二个element
  4. explode($result, ","),然后获取两个元素

然后你就可以使用

代码语言:javascript
复制
$page = $result[0] . '.php';
$info = $result[1];

然后使用include($page.$info);

票数 0
EN

Stack Overflow用户

发布于 2012-01-07 02:06:21

如果你的字符串中有重复的模式,你必须看一看。有几种方法可以切断你的线,并把它放在另一个形状。

最干净的方法是创建一个正则表达式,然后将其与preg_match一起使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8762247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档