Regex: получить число между двойными скобками - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно PHP-регулярное выражение, которое позволяет преобразовать {{[1][value|other]}} в {{1}}

Я пробовал много регулярных выражений, но безрезультатно, это работает только при первом появлении:

Мой текст: Hello {{[1][miss|mr]}} {{[2][Maria|Jon]}}

Результат, который я хочу: Hello {{1}} {{2}}

$pattern = '/{{\[(\d+)\].+}}/';
$matches = [];
preg_match($pattern, $content, $matches);

Дайте мне это:

Array

(

    [0] => {{[1][miss|mr]}} {{[2][Maria|Jon]}}

    [1] => 1

)

Но мне нужно также "2"

1 Ответ

2 голосов
/ 27 июня 2019

Это простой вопрос сопоставления / использования символов, которые вы хотите удалить, и захвата символов, которые вы хотите сохранить.

Regex Demo: https://regex101.com/r/GdIsZX/1/

PHP (https://3v4l.org/L5NSj)

$text = 'Hello {{[1][miss|mr]}} {{[2][Maria|Jon]}}';
echo preg_replace('~\[(\d+)]\[[^]]*]~', '$1', $text);

Вывод:

Hello {{1}} {{2}}

Приведенный выше шаблон не предназначен для проверки подстроки. Фокус - эффективное обобщенное сопоставление. Если вам нужен более строгий / точный шаблон, вам нужно будет улучшить свой вопрос с помощью входных данных, которые лучше соответствуют вашей задаче.

ps Если вы хотите сопоставить фигурные скобки, но не удалите их, вы можете использовать \K и заглядывание вперед.

https://3v4l.org/5oNrL

~{{\K\[(\d+)]\[[^]]*](?=}})~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...