【发布时间】:2018-02-26 06:53:12
【问题描述】:
现在我在替换 preg_match 中已经出现的字符串时遇到了问题。假设我有 [b]bla[/b] 的 bbcode,我有这部分正在使用 <b> 替换 [b],但我们只是说出于所有测试目的他们做了 [b]hi [b]test[/b][/b],最终出来的是“hi [b]test[/b] ",所有内容都以粗体显示,但 [b] 由于某种原因不会被替换。
目前这是我的表达方式:/\[b\](.*)\[\/b\]/
对不起,我没有显示我的代码,我是新手。
// Will convert string data into readable data
function ConvertStringData2ReadableData($UglyString) {
$CheckArrays = [
"QUOTE" => "/\[quote=?(.*)\](.*)\[\/quote\]/",
"BOLD" => "/\[b\](.*)\[\/b\]/",
"ITALIC" => "/\[i\](.*)\[\/i\]/",
];
$FanceString = $UglyString;
// QUOTES
do {
$FanceString = preg_replace_callback(
$CheckArrays['QUOTE'],
function($match) {
if (is_numeric($match[1])) {
$TPID = GetThreadPoster($match[1]);
$TPUN = GetUsernameS($TPID);
$statement = ('<div class="panel panel-default"><div class="panel-heading">'.$match[2].'<br>- <b>'.$TPUN.'</b></div></div>');
} elseif (!is_numeric($match[1])) {
$statement = ('<div class="panel panel-default"><div class="panel-heading">'.$match[2].'</div></div>');
}
return $statement;
},
$FanceString,
-1,
$count
);
} while ($count > 0);
// BOLD
do {
$FanceString = preg_replace($CheckArrays['BOLD'] , "<b>$1</b>" , $FanceString, -1, $count);
} while ($count > 0);
#$FanceString = preg_replace($CheckArrays['BOLD'] , "<b>$1</b>" , $FanceString, -1);
// ITALIC
do {
$FanceString = preg_replace($CheckArrays['ITALIC'] , "<i style='all: unset; font-style: italic;'>$1</i>" , $FanceString, -1, $count);
} while ($count > 0);
return($FanceString);
}
【问题讨论】:
-
显示一些代码!
-
请描述或向我们展示您的一些代码
-
为什么不使用
\[(\/?)b\] => '<$1b>'(它不会处理丢失的右括号) -
@Justinas 我真的不知道为什么我不知道,但我没有
-
@M0ns1f 抱歉,我正在尝试找到正确显示代码的方法,现已修复。
标签: php regex preg-replace preg-match