首页 > 解决方案 > 使用 PHP 对自定义 shortode 进行正则表达式匹配

问题描述

我正在尝试在 WYSIWYG 编辑器中实现一些简码,稍后将被动态内容替换。我似乎无法让正则表达式代码正常工作。

我尝试了无数来自谷歌的不同链接,但似乎没有什么能与我的确切问题相匹配。

我的字符串:

项目信息:[sc id=15]属性数[\sc]测试[sc id=15]项目数[\sc]

开发需要以下测试:

Walls: [sc id=12]number of walls[\sc]

我的代码:

preg_match_all('/[sc id=[0-9]+](.*?)[\/sc]/', $input_lines, $output_array);

我想先获取 id 号,然后用来自我的数据库的动态字符串替换整个短代码。

这是我目前得到的:

Array
(
    [0] => Array
        (
            [0] =>  [sc id=15]number of properties
            [1] => sc] tes
            [2] =>  [sc id=15]number of items
            [3] =>  [sc id=12]number of walls
        )

    [1] => Array
        (
            [0] => number of propertie
            [1] =>  te
            [2] => number of item
            [3] => number of wall
        )

)

我该如何解决这个问题?

标签: phpregexpreg-match-all

解决方案


您需要转义[\[使其含义字面匹配,[并且在您的正则表达式中还有一个问题,您在其中写入\/[\/sc]不是\\. 您可以使用此正则表达式,它与您预期的方式正确匹配。

\[sc id=[0-9]+\](.*?)\[\\sc\]

正则表达式演示

这是一个PHP 代码演示

$input_lines = "Project Information: [sc id=15]number of properties[\sc] test [sc id=15]number of items[\sc]


The development requires the following testing:
Walls: [sc id=12]number of walls[\sc]";
preg_match_all('/\[sc id=([0-9]+)\](.*?)\[\\\\sc\]/', $input_lines, $output_array);
print_r($output_array);

印刷,

Array
(
    [0] => Array
        (
            [0] => [sc id=15]number of properties[\sc]
            [1] => [sc id=15]number of items[\sc]
            [2] => [sc id=12]number of walls[\sc]
        )

    [1] => Array
        (
            [0] => 15
            [1] => 15
            [2] => 12
        )

    [2] => Array
        (
            [0] => number of properties
            [1] => number of items
            [2] => number of walls
        )

)

推荐阅读