PHP Regex, чтобы вернуть некоторые целые числа в строке - PullRequest
0 голосов
/ 03 мая 2011

Мне нужна помощь с регулярным выражением, пожалуйста.

Я думал, что я счастливо интегрирован с Mantis, пока не столкнулся с проблемой с проверкой, содержащей несколько проблем.Я использую Mantisbt 1.2.5

Сообщение о коммите, которое я пытаюсь поддержать, может выглядеть так: «Проблемы # 74 78 112 Произошло что-то для строки 485, что заняло всего 3 часа и 27 минут».Мне нужно мое регулярное выражение, чтобы вернуться [74, 78, 112] (но не [485, 7, 27]).

Мой 'текущий' $g_source_control_regexp = '/\b(bug|issue)[s]{0,1}\s*[#]{0,1}\s*(\d+\s+)+/i', кажется, возвращает 1 элемент 'Issues # 74 78 112', который ничего не обновляет

Любой совет приветствуется.

Джим

1 Ответ

1 голос
/ 03 мая 2011

Я не думаю, что вы можете сделать это с помощью регулярных выражений.Повторные группы захвата захватывают только последнюю итерацию (подробнее о Повторение захвата группы против захвата повторяющейся группы )

В противном случае я бы сделал это так (обратите внимание, что я непрограммист PHP ...):

str.match(/\b(?:bug|issue)s?\s*#?\s*((?:\d+\s+)+)/i)[1].trim().split(/\s+/)
result: ["74", "78", "112"]
  • (?:) - это группы без захвата
  • matches[0] обычно соответствует полному шаблону
  • matches[1] - первая захваченная группа (единственная в данном случае)
  • trim() необходима, чтобы избавиться от лишнего пробела в конце (без нее вы бы получили пустую группу в конце ["74 "," 78 "," 112 "," "])
...