preg_replace 内的 preg_replace

2024-05-06

现在我在替换已经从 preg_match 中出来的字符串时遇到问题。假设我有 bbcode[b]bla[/b],我有这部分正在替换[b] with <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);

}


你可以这样做:

$string = '[b]hi [b]test[/b][/b]';    
do {
    $string = preg_replace('/\[b\](.*)\[\/b\]/', '<b>$1</b>', $string, -1, $count);
} while ($count > 0);

或者如果可以替换所有,则使用@Justinas的想法(来自您OT的评论)[b] with <b> and [/b] with </b>(无论它们的顺序是否正确/成对)。

Edit:您还需要将报价正则表达式更改为:

/\[quote(?:=(\d+))?\](.*)\[\/quote\]/s

s标志允许.匹配换行符(您可能也想将其添加到其他换行符中)。我还修复了报价 ID 捕获部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

preg_replace 内的 preg_replace 的相关文章

随机推荐

  • 算法:最大计数器

    我有以下问题 您有 N 个计数器 最初设置为 0 并且您对它们有两种可能的操作 increase X 计数器 X 加 1 max counter 所有计数器都设置为任何计数器的最大值 给出一个包含 M 个整数的非空零索引数组 A 该数组代表
  • 修改 Android 可绘制对象的颜色

    我希望能够使用相同的可绘制对象来表示两者 and 作为相同的可绘制对象 并根据某些编程值重新为可绘制对象着色 以便最终用户可以重新主题化界面 做这个的最好方式是什么 我已经尝试过 并重复使用了其中的图标 这个以前的S O 问题 https
  • SecurityApplicationGroupIdentifier 的应用程序组返回 nil

    我设置了一个应用程序组与我的 Today Extension 一起使用 我在主应用程序的目标和扩展程序的目标中添加了应用程序组 在开发人员门户的应用程序 ID 配置中 我启用了应用程序组 但由于某种原因FileManager default
  • 在 IEnumerable 上使用 Seq 函数 [重复]

    这个问题在这里已经有答案了 我正在尝试在 IEnumerable 上应用 Seq 函数 更具体地说 它是System Windows Forms HtmlElementCollection它实现了ICollection and IEnume
  • 加速度计和校准 - iPhone SDK

    我需要在 iPhone 游戏中使用加速计的功能 我只需通过倾斜设备来移动图像即可 然而 YouTube 上的大多数视频仅显示以某种方式反转的倾斜功能 而忘记包含校准 我希望用户将他们的设备校准到他们所处的任何位置 有谁知道我应该如何开始 我
  • 如何编写简单的运动跟踪代码?

    我正在制作一个带有伺服系统和彩弹枪的哨兵炮塔 需要实现实时运动跟踪以使枪射击任何移动的东西 我该如何编码 任何好的算法 书籍 教程 我想自己制作而不是使用预制的解决方案 带有卡尔曼滤波的 Lucas Kanade 是最基本的运动跟踪算法 然
  • 如何在 Vue 中动态创建的组件上获取更新的 $refs?

    我的组件数量取决于数组数量 因此当我向数组添加新项目时 它应该创建新组件 当创建新组件时 我想获得它的参考 这就是我有误解的地方 最后添加的组件是undefined当我试图得到它时 但是 如果我在一段时间后尝试获取参考 它就会起作用 我猜这
  • 添加动态复选框处理 CheckedChanged 事件 ASP.NET

    我想知道为什么事件没有触发以及如何找到哪个复选框控件触发了事件 chkList1 new CheckBox chkList1 Text row subj nme ToString chkList1 ID row subjid ToStrin
  • 如何在android中向服务器发送数据[重复]

    这个问题在这里已经有答案了 我想在我的应用程序中循环发送纬度和经度 这是使用 GPS 获取此参数的函数 private void showLocation Location location String latitude Latitude
  • C# 中的异常转换

    为什么我会得到一个InvalidCastException当尝试这样做时 throw ArgumentNullException new Exception errormessage null 这是以下函数的简化版本 public stat
  • 如何删除字符串中的所有前导零

    如果我有一个字符串 00020300504 00000234892839 000239074 我怎样才能去掉前导零 这样我就只有这个 20300504 234892839 239074 请注意 上面的数字是随机生成的 ltrim http
  • 为什么 VectorBuilder 位于 scala.collections.immutable 包中?

    VectorBuilder在同一源文件中定义为Vector Vector是不可变的并且在scala collections immutable包 因此构建器位于同一个包中 据我所知 CanBuildFrom uses a VectorBui
  • 在 C++ 中将 64 位值左移 64 位给出奇怪的结果[重复]

    这个问题在这里已经有答案了 可能的重复 64位移位问题 https stackoverflow com questions 1024968 64bit shift problem 我在 Windows 8 64 位上使用 Visual St
  • 按需require()

    假设我创建了一个库 libname其中包含一个主文件 main js以及偶尔与主对象一起使用的多个可选库文件 a js and b js 我创造index js文件包含以下内容 exports MainClass require main
  • 在 SQL 中,如何获取特定列中具有最大值的行?

    我有一个疑问 SELECT COUNT as votes a member id FROM ballots a WHERE ballot id 1 GROUP BY a member id 这会产生类似的结果 votes member id
  • void abort() 的声明抛出不同的异常

    我正在尝试写一些C 代码 使用 C API Festival并且在尝试编译时陷入困境 这是我调用的方式g g Wall pedantic I I speech tools include helloFestival C o h L fest
  • jQuery 获取属性

    我有一个 uid 属性 它的值在我的 body 标签上 document ready regFunct function regFunct alert body attr uid 但它说 未定义 有事吗 try document ready
  • 删除单元格中的重复条目 - R

    我在这里到处搜索 并尝试了重复和独特的功能来解决我要问的问题 但没有任何效果 假设我有一个名为 company 的数据框 其状态可变 当我折叠行时 我在状态变量观察之一中留下以下输出 PA PA PA TX TX 我怎样才能删除单元格内的重
  • 如何将 Ajax() 中的值获取到 Django 模板中?

    我有一个 Django 模板 它显示从数据库接收的多个值并将其传递给模板 如下所示 在views py中 def test1 requests requests get requests get requests get someQuery
  • preg_replace 内的 preg_replace

    现在我在替换已经从 preg match 中出来的字符串时遇到问题 假设我有 bbcode b bla b 我有这部分正在替换 b with b 但我们只是说出于所有测试目的 他们所做的 b hi b test b b 最终出来的是 hi