Захват повторяющейся группы в Regex PHP

57
3

Я пытаюсь захватить повторяющиеся группы в регулярном выражении PHP.

Я использую выражение: (?:.*\s|^)@\[(\d+)\], которое соответствовало бы:

some text here @[2] some more text и возвращение 2 в матчах.

Теперь я хочу совместить:

some text here @[2] some more text @[3] more text и возврата [2, 3]. Прямо сейчас я могу заставить его вернуть 3 (последний элемент) с этим выражением: (((?:.*\s|^)@\[(\d+)\])+).

Я прочитал это и это, но я не смог получить тех, кто работает с preg_match или preg_match_all.

Любой ввод по этому вопросу будет оценен по достоинству.

спросил(а) 2011-12-07T18:17:00+04:00 8 лет, 10 месяцев назад
1
Решение
57

Я предлагаю это более простое решение:

$string = 'some text here @[2] some more text @[3] more text';
preg_match_all('/@\[(\d+)\]/', $string, $matches);
$matches = $matches[1];
$result = '[' . implode(', ', $matches) . ']';
echo $result; // [2, 3]

ответил(а) 2011-12-07T18:27:00+04:00 8 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема