我正在研究“哥德尔、埃舍尔、巴赫”第 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>>MUIMI[III]>>MIU
MUIIIUIIIU可以产生MU[III]UIIIU>>MUUUIIIUMUIIIU[III]U>>MUIIIUUU
MUIIIIU可以产生MU[III]IU>>MUUIUMUI[III]U>>MUIUU
显然,诸如此类的正则表达式/(.*)III(.*)/很有帮助,但我似乎无法让它们生成所有可能的匹配,只是它碰巧找到的第一个匹配。
有没有办法生成所有可能的匹配?
(注意,我可以想办法完全手动执行此操作,但我希望使用内置工具、正则表达式或其他方式有更好的方法)
(编辑以澄清重叠的需求。)