Ответ зависит от того, какой язык вы используете.
Для большинства разновидностей регулярных выражений, нет «простой» ответ ... Например, вы можете подумать, вы могли бы сделать что-то вроде этого:
^(?:.*?(\d+))+
... Какой бы (вы бы надеяться) создать новую группу захвата для каждой группы цифр.
Однако, если у вас есть быстрый взгляд на (например) java documentation, то вы увидите, что он говорит:
Захват группы пронумерованы путем подсчета их открывающей скобки слева направо
т. Е. Существует фиксированный номер, как указано, сколько пар скобок вы набрали! Таким образом, на большинстве языков вам нужно сделать больше, чем простое совпадение регулярных выражений, чтобы выполнить эту работу.
То есть, если вы не можете сделать свое регулярное выражение менее обобщенным (и гораздо более уродливым), делая что-то ужасное, как:
^(?:.*?(\d+))?(?:.*?(\d+))?(?:.*?(\d+))?(?:.*?(\d+))?
Вы может, однако, выполнить этот матч регулярок правильно, используя .NET или Perl 6.
какой язык/окружающая среда/инструмент/аромат regex вы используете это? вы все еще повторяете группу захвата (внешний '*' повторяет '(\ d *)'). если вы не используете .NET, вам нужно обходное решение –
Я использую визуальный базовый 2008, лучший способ, который я нашел, заключался в том, чтобы получить .102.103, как группу захвата, и более позднюю запись другой группы, но только со сценарием «.102.103». Но это два раза с использованием регулярных выражений, может быть, есть форма с одним регулярным выражением – eKeR
, поэтому мы говорим .NET? в этом случае, посмотрите объект 'Group', возвращенный для вашей второй группы захвата. он будет иметь свойство 'Captures', в котором вы можете получить все номера –