Regex 安全的正则表达式替代方案

Regex 安全的正则表达式替代方案,regex,parsing,Regex,Parsing,我正在创建一个日志服务,它将接受来自不同客户端的大量日志语句流。我需要允许我的客户配置某些文本简化,例如: 将任何由空格或非斜杠标点分隔的UUID替换为“*” 将某个前缀后面的任何内容替换为“*” 将斜杠之间的所有数字替换为“*” 文本简化将取决于客户的用例,但我希望正则表达式是自然的。然而,由于正则表达式可能遭受灾难性的回溯,一个客户可能会用一个坏正则表达式破坏服务器 所以我不能使用正则表达式,我正在寻找一些具有更严格复杂性保证的替代方法。将更高的负担加在表达式作者身上是可以接受的(而且可

我正在创建一个日志服务,它将接受来自不同客户端的大量日志语句流。我需要允许我的客户配置某些文本简化,例如:

  • 将任何由空格或非斜杠标点分隔的UUID替换为“*”
  • 将某个前缀后面的任何内容替换为“*”
  • 将斜杠之间的所有数字替换为“*”
文本简化将取决于客户的用例,但我希望正则表达式是自然的。然而,由于正则表达式可能遭受灾难性的回溯,一个客户可能会用一个坏正则表达式破坏服务器

所以我不能使用正则表达式,我正在寻找一些具有更严格复杂性保证的替代方法。将更高的负担加在表达式作者身上是可以接受的(而且可能是必要的)


我一直在谷歌上搜索,但找不到任何合适的工具。

我建议在后端使用正则表达式,同时不要向客户公开正则表达式引擎;客户可以使用regex实现一个预定义的替换选项菜单。

我见过一些应用程序只是将一种更简单的模式语言编译成正则表达式,例如,
变成了
/[0-9]{3}.*/
。但我不知道有任何通用的开箱即用的解决方案。您可能想查看,它不是回溯实现,因此可以保证线性性能。(为了保证这一点,它没有实现某些功能,比如需要回溯的回溯参考匹配。但限制并不严重。)@rici非常有趣。我得记住那个。我觉得这接近OP的要求,尽管它似乎不支持替换。OP可能必须自己实现这一部分。有一个灾难性的回溯警告,并且还实现了一个超时,以便您可以为日志记录服务查看这些内容。@p.s.w.g: