【发布时间】:2015-10-10 04:17:09
【问题描述】:
是否存在用于字符串以外的序列的正则表达式引擎?在我看来,限制正则表达式的字符串并没有什么特别之处,它们只是字符序列。
例如,如果我有 Buffalo 对象的列表,并且我想检查我的列表是否匹配 4 到 7 个超过 5 英尺高的 Buffalo,然后是白色 Buffalo,然后是反向引用之前的 4-7 Buffalo,然后是列表的末尾,是否有引擎支持这样的东西?
我目前不需要这个,只是好奇。
【问题讨论】:
是否存在用于字符串以外的序列的正则表达式引擎?在我看来,限制正则表达式的字符串并没有什么特别之处,它们只是字符序列。
例如,如果我有 Buffalo 对象的列表,并且我想检查我的列表是否匹配 4 到 7 个超过 5 英尺高的 Buffalo,然后是白色 Buffalo,然后是反向引用之前的 4-7 Buffalo,然后是列表的末尾,是否有引擎支持这样的东西?
我目前不需要这个,只是好奇。
【问题讨论】:
正则表达式适用于字符串,而不是对象。如果要匹配对象键或值,则必须对其进行迭代。
【讨论】:
查看 Boost's Regex 和 C++11 的 std::basic_regex。它似乎允许您将类型和一些特征指定为模板参数。但是,它并没有为您提供对类型或方法进行更复杂比较的方法。
一般来说,正则表达式与底层对象本身相等的概念非常相关。除此之外,还有一个与“regular expression”概念无关的附加功能集。
这对我提出的问题是...为什么似乎没有一个库可以执行您的建议?我认为这里的关键是正则表达式通常用于处理半结构化或非正式结构化数据。但是对象的结构非常正式,即使在相对无类型的语言(如 Javascript)中也是如此。在这一点上,程序员倾向于使用语言结构来构建他们认为合适的数据,而不是重新解释更通用的结构,因为这似乎使事情变得不那么惯用了。实际上,不必要的正则表达式似乎被视为 hack。
试图想象我想要一个完整的模式匹配语言用于有序对象序列的用例,我最终只遇到结构化事件日志可能有一些有趣的事件间发生的场景。例如,在数据包嗅探网络中寻找更高级别的模式。也许还有其他一些我没有想到的数据挖掘应用程序?
【讨论】: