Jak uzyskać wszystkie możliwe nakładające się dopasowania dla ciągu
Pracuję nad problemem systemu MIU z rozdziału 2 „Gödel, Escher, Bach”.
Jedna z zasad mówi
Rule III: If III occurs in one of the strings in your collection, you may make a new string with U in place of III.
Co oznacza, że strunaMIII
może zostaćMU
, ale dla innych, dłuższych ciągów może istnieć wiele możliwości [dopasowania w nawiasach]:
MIIII
może się poddaćM[III]I
>>MUI
MI[III]
>>MIU
MUIIIUIIIU
może się poddaćMU[III]UIIIU
>>MUUUIIIU
MUIIIU[III]U
>>MUIIIUUU
MUIIIIU
może się poddaćMU[III]IU
>>MUUIU
MUI[III]U
>>MUIUU
Wyraźnie regularne wyrażenia, takie jak/(.*)III(.*)/
są pomocne, ale nie mogę ich zmusić do wygenerowania każdego możliwego dopasowania, tylko pierwszego, które się zdarza.
Czy istnieje sposób na wygenerowanie każdego możliwego dopasowania?
(Zauważ, że mogę wymyślić sposoby na zrobienie tego całkowicie ręcznie, ale mam nadzieję, że jest lepszy sposób używania wbudowanych narzędzi, wyrażeń regularnych lub innych)
(Edytowane w celu wyjaśnienia nakładających się potrzeb.)