正则表达式计算不同排列的数量

Bar*_*tak 5 php ruby regex

所以这是RegEx的一个有点不寻常的用法;我想计算将由特定模式匹配的不同字符串的数量(或在合适的情况下表示无限)。

例如,让我们考虑[a-zA-Z]哪个会产生 52,[a-zA-Z]{1,2}哪个会产生 2652(52+52×52?52×2;对于像 一样的字符串减去 52×2 aaMM它们不不同)或者[a-zA-Z]+哪个会是 ?。

当然,我希望这种机制能够处理比这更复杂的正则表达式。我对 PHP 和 Ruby 的解决方案特别感兴趣。这甚至可能吗?

npi*_*nti 3

正则表达式用于通过将给定字符串与给定模式进行比较来匹配给定字符串。任何给定的正则表达式都可以匹配大量字符串,正则表达式越长,它可以匹配的字符串越多。

在我看来,你所追求的东西不能用正则表达式来完成。您可以编写一个程序来解构正则表达式并尝试猜测可以匹配的字符串数量。然而话虽如此,此类计划的建设很可能并非易事。

例如,在您的情况下, [a-zA-Z] 不仅会匹配az对于大写变体也是如此),而且还会匹配包含这些字母的任何字符串,这基本上是您可以找到的任何字符串想象一下其中至少包含其中一个字母。

添加^$锚点可能会减少点击量,但话又说回来,您仍然会拥有超过 48 个,因为有时您也可能认为{EmptyString}a{EmptyString}也可以通过 来匹配^a$,这使得可能的结果数量相当巨大。