Ruby Pattern Matching-查找所有可能匹配的数量

时间:2012-08-07 19:02:27

标签: ruby regex pattern-matching

有谁知道如何找到特定正则表达式模式的所有可能匹配的数量?我的意思是这样的:

Calculator_1 _([0-1]) 会返回2个可能的结果,因为它可以匹配两个不同的输入:

 -Calculator_1_0
 -Calculator_1_1

Calculator_1 _([0-2]) 返回3种可能的结果,因为它可以匹配三种不同的输入:

 -Calculator_1_0
 -Calculator_1_1
 -Calculator_1_2

Calculator_1 _(。*) 返回无限,因为它可以匹配无限输入:

 -Calculator_1_0
 -Calculator_1_1
 -Calculator_1_2
 -Calculator_1_3
 -Calculator_1_a
 ...

编辑:顺便说一下,这只是一个例子。

1 个答案:

答案 0 :(得分:0)

任何Ruby库(我所知道的)都没有内置这样的功能。要正确执行此操作,您需要parse the regular expression into pieces,才能正确区分(例如):

 /1+/   # Infinite possibilities
 /1\+/  # 1 possibility
 /1\\+/ # Infinite possibilities
 /[1+]/ # 1 possibility

一旦完成,对于具有*+{n,}限定符的任何正则表达式,提前转换所有(相关)将是一个相对“简单”的工作。 ?{n,m}限定符用于精确计数,将所有[…]个字符类转换为数字集,并在a|b个替换中展开(乘)结果{{1}分组表达式。

鉴于目前无法轻松正确地解析正则表达式,这个概念在水中已经死了。我也担心,这也是你的想法。是时候找到解决问题的另一种方法了。

例如,使用所有正则表达式的线程以及(a?b){2,3}的块形式来并行处理匹配,停止并中止所有进一步完成的扫描?