有没有办法获得正则表达式模式的所有可能结果?我见过的所有内容都是指针对字符串进行评估的模式。但我需要的是拥有这样的模式:
^EM1650S(B{1,2}|L{1,2})?$
生成所有可能的匹配项:
EM1650S
EM1650SB
EM1650SBB
EM1650SL
EM1650SLL
答案 0 :(得分:2)
在一般情况下,没有。在这种情况下,您几乎没有解决方案空间。
有一个section covering this in Higher Order Perl (PDF)和一个Perl module。我从来没有在其他任何方面重新实现它,但我有类似的问题,这个解决方案足以满足同样有限的需求。
答案 1 :(得分:2)
有些工具可以显示正则表达式的所有可能匹配。
这是用Haskell编写的:https://github.com/audreyt/regex-genex 这是一个Perl模块:http://metacpan.org/pod/Regexp::Genex
不幸的是我找不到任何关于JavaScript的内容
答案 2 :(得分:1)
在这种特殊情况下,是的。正则表达式生成有限数量的有效字符串,因此可以对它们进行计数。
你只需要解析正则表达式。其中一部分(EM1650S
)是强制性的,所以请考虑其余部分。按|
(或)符号解析。然后枚举它的两边的字符串。然后你可以得到它们的所有可能组合。
某些正则表达式(包含*
或+
符号)可以表示无限数量的字符串,因此无法计算它们。
答案 3 :(得分:1)
从计算理论的角度来看,正则表达式相当于有限状态机。这是“自动机理论”的一部分。您可以创建一个等效于正则表达式的有限状态机,然后使用图遍历算法遍历FSM的所有路径。在一般情况下,可数无限数量的字符串可能与正则表达式匹配,因此您的程序可能永远不会终止,具体取决于输入正则表达式。