Предположим, у меня есть строка вроде этого: abc def ghi jkl
(Я просто поставил пространство в конце для простоты, но для меня это не имеет особого значения), и я хочу захватить его «куски» "следующим образом:Tokenizing строка с регулярным выражением
abc
def
ghi
jkl
если и только если в строке есть 1-4" куска ". Я уже пробовал следующее регулярное выражение:
^([^ ]+){1,4}$
на Regex101.com, но он только фиксирует последнее появление. Выдается предупреждение об этом:
Повторная группа захвата будет захватывать только последнюю итерацию. Поместите группу захвата вокруг повторной группы, чтобы захватить все итерации или использовать группу, не участвующую в захвате, если вы не заинтересованы в данных.
Как исправить регулярное выражение для достижения моей цели?
Это 1 или более символов является проблемой XY. Разделите/взорвите строку с пробелом и проверьте, содержит ли результирующий массив 4 непустых элемента.Тем не менее, можно проверить и * сопоставить множественные последующие вхождения * (не захватывать) с помощью PCRE, а не POSIX. –
Итак, я могу сделать это «вручную», используя только язык программирования, а не регулярные выражения, но есть ли более автоматическое решение? На самом деле он должен быть частью более сложного выражения. PCRE подходит для меня. – mzzz
Если ваш исполняемый файл разрешает доступ к значениям группы захвата, нет решения, которое будет работать для вас. –