Я пытаюсь захватить серию чисел из определенной строки в абзаце текста, используя регулярное выражение. В приведенном ниже упрощенном примере я просто пытаюсь зафиксировать 4-значные номера в разделе «Активные телефонные линии». Я предполагаю, что существует неизвестное количество активных телефонных линий, и номера не могут повторяться:
User Names: bob, jill, toni, tom
Active Phone Lines: 1010, 2020, 3030, 4040, 5050, 6060, 7070
Inactive Phone Lines: 1111, 2222, 3333, 4444, 5555
Я знаю, что могу разделить строку по символам возврата каретки/перевода строки и просто использовать регулярное выражение ([0-9]{4})
, но мне стало любопытно, и я хочу посмотреть, могу ли я просто использовать одно регулярное выражение.
До сих пор мне удавалось получить все, что я хочу, с помощью следующего регулярного выражения:
(?<=Active Phone Lines: |, )([0-9]{4})(?=, |\rInactive Phone Lines:)
Но это захватит 2222, 3333 и 4444 «неактивных телефонных линий». Я знаю, что могу использовать обратные ссылки для ссылки на ранее захваченные группы, но, насколько я могу судить, я могу ссылаться на них только в порядке захвата, а не только в предыдущем захвате. И похоже, что это работает только в пределах одного и того же выражения, а не через несколько итераций поиска.
Есть ли способ вернуться к предыдущей захваченной группе? Предполагая, что $foo
сделает это, я мог бы использовать следующее регулярное выражение:
(?<=Active Phone Lines: |$foo, )([0-9]{4})(?=$foo, |\rInactive Phone Lines:)
(test)(this)(?2)(?1)
. Это будет соответствоватьtestthisthistest
- person HamZa   schedule 28.10.2013