Php 将 * 替换为 <b> 标签

Php replace * with <b> tags

我想在我的字符串中用 <b>asd</b> 替换 *asd*

*Abdāl* (*lit*: substitutes, but which can also mean generous [*karīm*]

在上面的字符串中,我想用 <b>abdal</b> 替换 *abdal* 以及用 *.

括起来的其他单词

我该怎么做?

我的代码:

$s="*Abdāl*(*lit*:替代品,但也可以表示慷慨 [*karīm*]";<br> preg_replace_callback("#\*[^\*]*\*#",function ($string) { $string = preg_replace("/<a\s(.+?)>(.+?)<\/a>/is", "<b>$2</b>", $string ); }, $s);

我能够将 *abdal* 字符串作为 preg_replace_callback 中的匹配项,但现在我正在尝试将 *abdal* 替换为 <b>abdal</b>

$s="*Abdāl* (*lit*: substitutes, but which can also mean generous [*karīm*]";                                       
$s = preg_replace_callback("#\*[^\*]*\*#", function ($string) {
        $string = preg_replace("/\*([^*]+)\*/", "<b></b>", $string);
        return $string[0];
       }, $s);

这对我有用。

您可以使用对 preg_replace 的简单调用,并在星号内的值上使用带有捕获组的正则表达式和带有占位符的字符串替换模式到第 1 组:

$s = "*Abdāl* (*lit*: substitutes, but which can also mean generous [*karīm*]";
$s = preg_replace("#\*([^*]+)\*#", "<b></b>", $s);
echo $s; // => <b>Abdāl</b> (<b>lit</b>: substitutes, but which can also mean generous [<b>karīm</b>]  

参见PHP demo

正则表达式是 \*([^*]+)\* 并且它匹配 *,然后匹配 并将 [=13= 以外的任何一个或多个字符捕获到第 1 组 ](使用 [^*]+ - 注意 * 不必在字符 class 内转义,如果您还需要处理空的 ** 对,请替换 + 与您的 * 量词),然后匹配尾随 *。替换模式包含引用存储在第 1 组中的文本的

参见regex demo