整数列表的正则表达式算法

时间:2010-07-15 04:33:51

标签: regex integer

通常,正则表达式适用于ASCII码。说“abbbd”。匹配(“ab * d”)。

我想知道是否存在允许用户匹配正则表达式的算法或工具 对于整数列表。

e.g:

int[] a = {1,2,2,2,2,5}; 
a.match("12*5"); 

非常感谢你。

4 个答案:

答案 0 :(得分:1)

之前我做过类似的事情,虽然基本上我必须自己编写引擎。关于ASCII(或Unicode或任何其他字符集)并没有什么神奇之处,当他们在学校教regular expressions时,他们通常使用一小组任意符号(如Σ= {a,b})来保持简单。算法仍然有效。

Perl风格的正则表达式引擎的大多数功能都是特定于字符的。某些功能(如^$)仍可正常使用。像[:alnum:]这样的人完全没有意义。其他像[3-5]这样的人可以适应非字符串。

一个棘手的问题(已经被polygenelubricants和其他人注意到)是Perl正则表达式运行良好,因为你用来描述语言的东西,以及你匹配的东西,都是字符串 - 语法没有'对于非字符串字母表几乎也可以工作。所以字符中的/[3-5]/可能需要[3,4,5](整数列表),因此您需要从表达式而不是字符串构建语言(除非您想编写自己的解析器!)。

为什么大多数正则表达式库在字母表上都不通用?打败我 - 这是一个非常有用的工具,并且将它仅应用于字符串似乎是一种可怕的浪费。 LINQ很好,但我不确定它会如何帮助。

答案 1 :(得分:0)

我对此表示怀疑,主要是因为它太模糊了。只是看看你提供的例子,你的意思是匹配这个:

{1, 2, 2, 2, 2, 5}

或者这个:

{12, ..., 5}

当然,你可以稍微改进一下语法来解决这个问题,但你可能最终会得到一个非常混乱的语法。

这太复杂了,我确信有更好的方法(列表推导,LINQ等)。

答案 2 :(得分:0)

你可以使用类似marge()的东西,marge只会创建一个包含数组所有成员的字符串/字符序列 -

a.marge().match("12*5");

答案 3 :(得分:0)

int[] a = {1,2,2,2,2,5}; 
a.match("12*5"); 

假设您正在尝试将“122225”与正则表达式“12 * 5”匹配。 使用C / C ++中的snprintf或Java等中的.toString()生成字符串应该干净简单。

不建议您为此获得特殊的算法或工具。