0

我有一个脚本,它通过用户的文本输入运行,并用 html 替换标签中包含的文本。它大部分工作正常,但是其中一个标签给我带来了麻烦。

[include=someFile.php] 应该将 someFile.php 的内容加载到页面中,[inlude=thatFile.txt] 应该加载 thatFile.txt。但是,当包含标签有多个实例时,每个实例都引用不同的文件,它会将它们全部替换为仅包含的文件之一。我正在使用的代码是这个......

if (preg_match ("/\[include=(.+?)\]/", $text, $matches)) {
  foreach ($matches as $match) {
    $match = preg_replace("/\[include=/", "", $match);
    $match = preg_replace("/\]/", "", $match);
    $include = $match;
    $file_contents = file_get_contents($include);
    $text = preg_replace("/\[include=(.+?)\]/", "$file_contents", $text);
  }
}

foreach 循环的最后一行似乎是用它在当前标签中找到的任何内容替换匹配标签的每个实例,但我不知道该怎么做。任何建议表示赞赏!

编辑:感谢 Uby,我做了以下更改,现在可以使用。

if (preg_match_all ("/\[include=(.+?)\]/", $text, $matches)) {

    foreach ($matches[0] as $match) {
        $file = preg_replace("/\[include=/", "", $match);
        $file = preg_replace("/\]/", "", $file);
        $file_contents = file_get_contents($file);
        $text = str_replace("$match", "$file_contents", $text);
    }

}
4

1 回答 1

0

preg_match()将仅匹配一次,在您的情况下您应该使用preg_match_all()(请参阅文档http://php.net/manual/en/function.preg-match-all.php

仔细阅读文档,你的循环不会像这样工作。

于 2013-04-05T18:11:26.000 回答