我想在我的字符串中将*asd*
替换为<b>asd</b>
。
*Abdāl* (*lit*: substitutes, but which can also mean generous [*karīm*]
在上面的字符串中,我想用*abdal*
替换<b>abdal</b>
以及用*括起来的其他字。
我该怎么做?
mycode的:
$s="*Abdāl* (*lit*: substitutes, but which can also mean generous [*karīm*]";
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>
。
答案 0 :(得分:2)
您可以使用对preg_replace
的简单调用,并使用带有捕获组的正则表达式,而不是使用星号内的值和带有占位符的字符串替换模式进行分组1:
$s = "*Abdāl* (*lit*: substitutes, but which can also mean generous [*karīm*]";
$s = preg_replace("#\*([^*]+)\*#", "<b>$1</b>", $s);
echo $s; // => <b>Abdāl</b> (<b>lit</b>: substitutes, but which can also mean generous [<b>karīm</b>]
请参阅PHP demo。
正则表达式为\*([^*]+)\*
,它与*
匹配,然后匹配并捕获到第1组除*
以外的任何一个或多个字符(带{{ 1}} - 请注意,[^*]+
不必在角色类中进行转义,如果您还需要处理空的*
对,请将**
替换为您的+
量词),然后匹配尾随*
。替换模式包含*
,它引用存储在组1中的文本。
请参阅regex demo。
答案 1 :(得分:1)
$s="*Abdāl* (*lit*: substitutes, but which can also mean generous [*karīm*]";
$s = preg_replace_callback("#\*[^\*]*\*#", function ($string) {
$string = preg_replace("/\*([^*]+)\*/", "<b>$1</b>", $string);
return $string[0];
}, $s);
这对我有用。