通常,正则表达式适用于ASCII码。说“abbbd”。匹配(“ab * d”)。
我想知道是否存在允许用户匹配正则表达式的算法或工具 对于整数列表。
e.g:
int[] a = {1,2,2,2,2,5};
a.match("12*5");
非常感谢你。
答案 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()生成字符串应该干净简单。
不建议您为此获得特殊的算法或工具。