@
bumz #45 我没有做很强的表达式优化,写出了一个长达 62.1 MB ( 65,152,515 个字符)的正则表达式匹配 13 的倍数(只匹配不带前导零、不带符号的正数)。输出的表达式使用计算机科学的常用语法(只用 | OR, () GROUP 和连接、空串)。
https://gist.github.com/GeeLaw/be3aec94a6ba7c3817ef2e16d261f616匹配 3 的倍数是:
(((2|5|8)(0|3|6|9)*(2|5|8)|1|4|7)((1|4|7)(0|3|6|9)*(2|5|8)|0|3|6|9)*((1|4|7)(0|3|6|9)*(1|4|7)|2|5|8)|(2|5|8)(0|3|6|9)*(1|4|7)|3|6|9)(((2|5|8)(0|3|6|9)*(2|5|8)|1|4|7)((1|4|7)(0|3|6|9)*(2|5|8)|0|3|6|9)*((1|4|7)(0|3|6|9)*(1|4|7)|2|5|8)|(2|5|8)(0|3|6|9)*(1|4|7)|0|3|6|9)*
注意该程序经常输出非最优解,例如对于 5 的倍数,最简单的解是 5|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(5|0),该程序输出的是一个长达 2899 字符的表达式。