使用 PHP 的自定义简码正则表达式匹配

RegEx matching for custom shortodes using PHP

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

我已经尝试了无数来自 Google 的不同链接,但似乎没有任何内容符合我的确切问题。

我的字符串:

Project Information: [sc id=15]number of properties[\sc] test [sc id=15]number of items[\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
        )

)

如何解决这个问题?

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

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

Regex Demo

这是一个PHP Code demo

$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
        )

)