我正在研究“哥德尔、埃舍尔、巴赫”第 2 章中的 MIU 系统问题。
其中一项规则规定
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.
这意味着字符串MIII
可以变为MU
,但对于其他更长的字符串,可能有多种可能性[括号中的匹配项]:
MIIII
可以产生M[III]I
>>MUI
MI[III]
>>MIU
MUIIIUIIIU
可以产生MU[III]UIIIU
>>MUUUIIIU
MUIIIU[III]U
>>MUIIIUUU
MUIIIIU
可以产生MU[III]IU
>>MUUIU
MUI[III]U
>>MUIUU
显然,诸如此类的正则表达式/(.*)III(.*)/
很有帮助,但我似乎无法让它们生成所有可能的匹配,只是它碰巧找到的第一个匹配。
有没有办法生成所有可能的匹配?
(注意,我可以想办法完全手动执行此操作,但我希望使用内置工具、正则表达式或其他方式有更好的方法)
(编辑以澄清重叠的需求。)