繁体   English   中英

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

[英]Are regular expressions only applicable to Strings?

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

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

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

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

这个概念是否也存在于数字值中,但是没有在Java中实现,还是对于数字值实现具有挑战性?

据我了解,正则表达式应适用于涉及搜索的任何地方(与值类型无关)。


正如答案和评论中所建议的那样,Java 8的Stream功能上实现了我想要的功能(通过过滤器等),但是我的问题主要是因为正则表达式模式列表中缺少用于数字值的简写形式。 例如,如果> x作为模式存在,那会更容易。

正则表达式实际上与有限状态机属于同一家族,其思想是您拥有所有已知字符的字母,并且能够通过表达式本身来表示捕获状态。

例如,表达式“ Colorado License Plate Number [AZ]{3}-\\d{3}可以捕获很多东西,但是它需要字符串“科罗拉多州车牌号”作为该状态的一部分。 是的,其中包括空间。

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

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

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

    • 这表示通过列表进行过滤操作,给定列表i的元素,则查找i > x

...等等。

这些更好地表示为谓词 Google Guava有一个完整的类专门针对它们,而Java 8中的lambda可以在流中代替它们。

因此,是的,正则表达式实际上仅适用于字符串。 如果您想要更复杂的FSM,则可以编写一个,但不使用本地正则表达式引擎。

正则表达式是专门适用于字符串的概念(不适用于Java)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM