1

我想制作代码框,我可以在其中应用更改。如果我有这个:$var= "word";在这些[code]HERE里面[/code],我会$var变成红色和"word"绿色。

我曾经preg_replace选择这些之间的内容[code] [/code]

$codebox = preg_replace("/\[code\](.*?)\[\/code\]/","$1",$string);

问题是 preg_replace 我可以进行外部更改(对整个代码)。我想对这些[code] [/code]. 比如:背景颜色、所有文本颜色、所有文本字体、所有文本字体粗细等等……这意味着我需要将其取出应用更改然后放回原处。

我希望能够在not on 上使用str_replacepreg_replace功能。$1$string

例如"word"变成绿色。我会用

preg_replace("/(\".*?\")/","<span style='color: #090;'>$1</span>",$string)

我不能preg_replace在里面使用preg_replace,可以吗?我不知道我是否在这里使用了错误的功能,或者有办法做到这一点。

你可能会发现我的模式错了,纠正我我昨天刚学的。

4

2 回答 2

2

preg_match当您首先使用而不是提取代码时,定位标签内的代码会更简单一些preg_replace

$codebox = preg_match("/\[code\](.*)\[\/code\]/",$string,$matches);
$innercode = $matches[0];

// Then...

$innercode = preg_replace( ...

// Later on...

echo "[code]".$innercode."[/code]";

您的替换返回字符串,因此它们可以很好地嵌套。

另外,如果您不熟悉正则表达式,我建议您查看文本到正则表达式转换器。它帮助我更好地掌握了它们:

http://txt2re.com/index-php.php3?s= $bacon%20=%20%22good%22;&-21&2&6&-23&7&1&-22

于 2013-04-19T21:18:27.600 回答
2

使用preg_replace_callback

$string = '[code]$var = "word";[/code]';
$codebox = preg_replace_callback("/\[code\](.*?)\[\/code\]/",function($m){
    // The following replacements are just a demo
    $m[1] = preg_replace('/"([^"]+)"/', '"<span style="color:#0D0;">$1</span>"', $m[1]); // green value
    $m[1] = preg_replace('/(\$\w+)/', '<span style="color:#F00;">$1</span>', $m[1]); // Red var name
    $m[1] = str_replace(' = ', '<span style="color:#00F;"> = </span>', $m[1]); // blue = sign
    return $m[1];
},$string);
echo $codebox;

在线演示

于 2013-04-19T21:29:52.157 回答