Соответствие RegEx для пользовательских шортодов с использованием PHP - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь внедрить некоторые шорткоды в редактор WYSIWYG, который позже будет заменен динамическим контентом. Кажется, я не могу заставить работать код регулярного выражения.

Я пробовал бесчисленное множество разных ссылок от Google, но, похоже, ничто не соответствует моей проблеме.

Моя строка:

Информация о проекте: [sc id = 15] количество свойств [\ sc] test [sc id = 15] количество предметов [\ sc]

Разработка требует следующего тестирования:

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

Мой код:

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

Я хотел бы сначала получить номер идентификатора, а затем заменить весь шорткод динамической строкой из моей базы данных.

Вот что я сейчас получаю:

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
        )

)

Как мне решить эту проблему?

1 Ответ

3 голосов
/ 01 мая 2019

Вам нужно экранировать [ как \[, чтобы сделать его буквальным соответствием [, а также есть еще одна проблема в вашем регулярном выражении, где вы написали \/ в [\/sc] вместо \\,Вы можете использовать это регулярное выражение, которое правильно соответствует ожидаемому вами.

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

Regex Demo

Вот это 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
        )

)
...