【问题标题】:Match a regular expression against an array将正则表达式与数组匹配
【发布时间】:2014-02-06 00:44:07
【问题描述】:

我们都知道如何使用正则表达式在字符串中查找内容。但是,至少在数学上,正则表达式不仅限于实际的Strings 和char[]s;可以使用正则表达式来匹配int[] 中的子序列。但是,我似乎找不到任何关于使用非字符字符串的正则表达式。有没有人知道这样的事情?

这主要是受到CodingBat 等网站上出现的大量“数组子序列”类型问题的启发。通常,我会将数组转换为字符串,以便可以在其上使用正则表达式,例如我对Java > Warmup-2 > noTriples 的解决方案是

return Arrays.toString(nums).split("(\\d*+), \\1, \\1(?!\\d)").length == 1; 

(我喜欢打高尔夫球)。

我考虑过做类似的事情

return new String(nums,0,nums.length).split("(.)\\1\\1").length == 1;

(确实有效),但不能使用文字值(例如,编译器将拒绝其中包含\u0000-\u001F 的任何程序,除了一对),此外还有其他问题。

有人知道直接对整数数组进行模式匹配的方法吗?(使用某种正则表达式,甚至使用更受限制的语言?)

【问题讨论】:

  • 那么转换为字符串并使用正则表达式有什么问题?它不能解决问题吗?我能想到的其他方法是使用嵌套循环。
  • 转换为字符串效率低下并且可能会被欺骗(例如,字符串数组可能在某些字符串中包含分隔符)

标签: java regex arrays


【解决方案1】:

Matcher 类将 CharSequence 作为输入。如果您的整数都有两个字节或更少的值,那么您可以将 int 数组包装在 CharSequence 中。只需屏蔽 charAt() 方法中的高位即可。

否则,您将不得不深入研究 Pattern 和 Matcher 的源代码。这不会是一件小事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多