在星号之间加粗文本

时间:2013-10-08 16:57:32

标签: php str-replace

我想创建一个PHP函数,使双星号之间的文本变为粗体,并在一个星号(非常类似于stackoverflow上的编辑器)之间使用斜体。

同样的规则适用,如果*和单词之间有空格,则不应呈现。

谁能帮助我? 我试过,但我只走到这一步,因为我不知道如何制作奇怪的星号“< b>”和偶数的“< / b>”。

(我不能在没有空格的情况下输入它们,stackoverflow会将文本呈现为粗体.....)

$thenewtext = str_replace("**", "<b>", "**Hello World** of PHP");

3 个答案:

答案 0 :(得分:13)

一个简单的正则表达式可以解决这个问题:

$thenewtext = preg_replace('#\*{2}(.*?)\*{2}#', '<b>$1</b>', '**Hello World** of PHP');

答案 1 :(得分:0)

我不太熟悉它,但你需要一个正则表达式。查看preg_replace()

我最近实现了一个服务器端文本突出显示系统,以补充jQuery UI的AutoComplete。

我对你的想法的改编将是这样的:

$txt = 'not bold [BeginBold]Yes Bold[EndBold] not bold again';

$newtxt = str_replace("[BeginBold]", "<b>", $txt);
$newtxt = str_replace("[EndBold]", "</b>", $txt);
echo $newtxt;

这会产生:

不粗体是粗体不再粗体

答案 2 :(得分:0)

让我们在输入中显示一些边缘情况。 在我的代码片段中,我将使用环视来确保星号不大于 2,并且在开始/结束双星号内不允许有空格。

对于如何处理这些边缘案件有一些主观的解释,但我至少可以说这种模式试图取代已发布问题中要求的空格取消资格。

代码:(Demo)

$string = 'start ** not bold ** and **bold** not bold **bold *** still bold** not bold **** not bold ****';
// bad space------⬏
// completely valid triple asterisk should not break styling-⬏
// more than 2 consecutive asterisks should not trigger styling?----------------------⬏⬏

echo preg_replace('/(?<!\*)\*\*(?![\s*])(.*?)(?<![\s*])\*\*(?!\*)/', '<b>$1</b>', $string);

输出:

start ** not bold ** and <b>bold</b> not bold <b>bold *** still bold</b> not bold **** not bold ****