В Perl, я пытаюсь захватить слова как жетоны из следующих примеров строк (там всегда будет по крайней мере, одно слово):Regex: Захватив повторяющуюся группу групп (Perl)
"red" ==> $1 = 'red';
"red|white" ==> $1 = 'red'; $2 = 'white';
"red|white|blue" ==> $1 = 'red'; $2 = 'white'; $3 = 'blue';
etc.
Узор Я вижу здесь: WORD, а затем п множеств "| WORD" [п> = 0]
Так от этого, у меня есть:
/(\ W +) ((?: \ |) (\ w +) *)/
Который, по моему мнению, всегда будет соответствовать первому СЛОВО, и если пара WORD существует, запишите это столько раз, сколько необходимо.
Это не работает, хотя, и я попробовал несколько вариантов, как:
/^ (\ W +) (\ | (\ W +)) * $/
... что мне не хватает?
Вы не можете сделать это, как это. Когда вы повторяете группу захвата, предыдущее совпадение перезаписывается новым (при каждом повторении). Почему бы вам просто не использовать split? –
Вы можете добиться этого с помощью Python PyPi regex, .NET Regex (CapureCollection), и есть возможность получить захват в библиотеке регулярных выражений Boost. –
@ WiktorStribiżew: вы также можете добиться этого с помощью регулярных выражений Perl - просто не так, как пытается OP. – ruakh