我想知道如何将php字符串中的一些文本替换为包含或类似的内容。
这是我的示例字符串:我有一个字符串"bla {{ module:projects,id=1 }} bla bla“
我希望找到{{ module:projects,id=1 }}并将其包含在字符串中的位置(‘projects.php?id=1’);中。
我该怎么做呢?
如果我可以这样做,但我不能让它从字符串中执行php,那么另一种方法是"bla bla bla“
发布于 2012-01-07 02:55:14
使用preg_replace:
$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‘的文件。
要获取文件并实际包含它,请执行以下操作:
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*)的变化空间较小。
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);
}发布于 2012-01-07 02:03:22
我认为您可以使用preg_match来实现这一点,但为了避免创建规则的麻烦,我将使用explode()来剪切字符串的不同部分。
按以下顺序剪切字符串:
explode($string, "{{")并获取数组($array[1])explode($result, "}}")中的第二个元素,并获取第一个elementexplode($result, ":")并获取第二个elementexplode($result, ","),然后获取两个元素然后你就可以使用
$page = $result[0] . '.php';
$info = $result[1];然后使用include($page.$info);
发布于 2012-01-07 02:06:21
如果你的字符串中有重复的模式,你必须看一看。有几种方法可以切断你的线,并把它放在另一个形状。
最干净的方法是创建一个正则表达式,然后将其与preg_match一起使用
https://stackoverflow.com/questions/8762247
复制相似问题