我想知道是否存在非字符串的顺序数据的正则表达式之类的东西。
我知道正则表达式本质上归结为 DFA,但我对指定这些 DFA 的高级语言更感兴趣。
最佳答案
在正则表达式的理论中,绝对没有任何东西可以阻止它们被应用于其他东西,而不仅仅是字符串。只是大多数正则表达式引擎实现都不允许这样做。
但是,如果您有一个正则表达式引擎,允许您将字符串视为未编码的 8 位数据(有时称为 BINARY
、 8BIT
或 ASCII-8BIT
),那么您可以使用该引擎解析字节-面向二进制数据。
Ragel是专门为解析二进制协议(protocol)而设计的状态机编译器。您使用高级(类似正则表达式)DSL 编写状态机,然后 Ragel 将其编译成您的目标语言 - Ragel 目前支持 C、C++、Objective-C、D、Java 和 Ruby。
大多数函数式编程语言都具有强大的模式匹配功能,这些功能直接嵌入到语言本身中。这些工具可用于模式匹配二进制数据。其中一个例子是 Erlang 对 building and pattern matching binary data structures 的支持。 .
OMeta是一种模式匹配和模式转换语言,基本上是正则表达式的超集。它不仅支持字符串的匹配,还支持整数和任意对象的数组和列表的匹配。
关于regex - 非字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/593140/