正则表达式是否仅适用于字符串?

时间:2016-01-04 03:22:04

标签: java regex

我想知道正则表达式的概念是否仅适用于Java中的String类型,或者也可以应用于数值。例如:

  
      
  • 从大于x的整数列表中查找所有整数   少于y

  •   
  • 从大于x

  • 的整数列表中查找所有整数   
  • 从小于(x-10)的整数列表中查找所有整数

  •   

这个概念是否也存在于数值中,但是没有用Java实现,还是实现数值太难了?

据我所知,正则表达式适用于涉及搜索的任何地方(无论价值类型如何)。

正如答案和评论中所建议的那样,Java 8的Stream在功能上完成了我正在寻找的东西(通过过滤器等),但我的问题主要是在{{3}中缺少短手形式对于数值;例如,如果> x 作为模式存在,本来就更容易。

2 个答案:

答案 0 :(得分:4)

正则表达式与finite-state machine在同一个系列中,其想法是您拥有所有已知字符的字母表,以及通过表达式本身表示捕获状态的能力。

例如,表达式Colorado License Plate Number [A-Z]{3}-\d{3}可以捕获许多内容,但它需要字符串“Colorado License Plate Number”才能成为该状态的一部分。是的,空间包括在内。

您所代表的表达方式没有任何特定于州的信息;也就是说,他们专门检查布尔响应。

  • 从大于x但小于y

    的整数列表中查找所有整数
    • 这表示通过列表进行过滤操作,给定列表i的元素,找到x < i < y
  • 从大于x

    的整数列表中查找所有整数
    • 这表示通过列表进行过滤操作,给定列表i的元素,找到i > x

......等等。

这些更好地表示为predicates。 Google Guava有an entire class专用于它们,Java 8中的lambdas可以在流中替换它们。

所以,是的,正则表达式实际上只适用于字符串。如果你想要一个更复杂的FSM,那么可以写一个,但不能使用你的本地正则表达式引擎。

答案 1 :(得分:1)

正则表达式是一种专门应用于字符串的概念(这不是特定于Java的)。

听起来你想要的是谓词,它是一个接受值并返回true或false的函数,因此可用于过滤对象集合。 Java 8流支持这种过滤,Groovy可以将过滤器应用于Java集合(实际上任何可迭代的)。