0

我正在尝试编写脚本,但一直卡住。

我有一个变量$message。我想解析它。这样 * 和 * 之间包含的所有内容都可以是不同的颜色。例如:

This is message * 1

不会受到影响。但

This is a *message* see how it works *again here*.

会有不同的颜色messageagain here

4

5 回答 5

2

使用正则表达式:

$in = 'This is a *message* see how it works *again here*.';
$out = preg_replace('/\*([^*]+)\*/', '<span class="color">$1</span>', $in);
print $out;

比非贪婪匹配快一点。

于 2012-09-04T14:28:34.700 回答
1

用于explode拆分星号上的字符串。之后,您可以输出数组中的每个元素,中间使用正确的标记来更改颜色。

像这样的东西:

$parts = explode('*', $message);

$italic = false;
for ($part in $parts)
{
  if ($italic) 
    echo '<i>' . $part . '</i>';
  else 
    echo $part;

  $italic = !$italic;
}
于 2012-09-04T14:23:58.017 回答
1

我建议使用preg_replace()

$message = preg_replace("#\*(.*?)\*#", "<span class=\"color-red\">\\1</span>", $message);
于 2012-09-04T14:27:41.127 回答
0
$message = 'This is a *message* see how it works *again here*.';
$colorMessage =  preg_replace('/\*([^\*]+|[\w]+)\*/', "<span class='color2'>$0</span>", $message);
于 2012-09-04T15:43:23.477 回答
0
$output = preg_replace('/\*([^*]+)\*/', '<em>$1</em>', $message);

或者

$output = preg_replace('/\*(.+?)\*/', '<em>$1</em>', $message);
于 2012-09-04T14:26:32.493 回答