你会模仿哪个正则表达式api?

时间:2009-10-25 00:20:23

标签: regex language-agnostic language-design

大多数编程语言都有用于正则表达式搜索和替换的api。根据我的经验,apis可能非常笨重,可能是由于可用的操作数量和效率考虑因素。

如果你要实现api,你会模仿哪一个?

特别感兴趣的是api的方法和对象,还有regexp方言和对任何标准的遵守。

3 个答案:

答案 0 :(得分:3)

如果你模仿一个API,它就会像原版一样笨拙(如果不是更多的话)。我不知道你得到了什么。如果您真的担心丢失100 KB到正则表达式API,您应该只实现一个不像大型子集的简约子集。检查是否有任何API配置以禁用您不需要的功能。

答案 1 :(得分:2)

我认为Lua pattern matching API是一个很好的模拟API。它具有极好的功能与简单的平衡。并且有一个辉煌的设计选择:正则表达式的转义字符与字符串文字的转义字符不同 - 所以没有反斜杠地狱

如果我要向Lua API添加一个东西,那就是or-patterns。

答案 2 :(得分:0)

实际上已经实现了一个完整的正则表达式引擎(在我公司的产品内部使用,如RegexBuddy)和一个基于PCRE的公共“API”(Delphi的TPerlRegEx组件),我建议不要太担心模仿这个或那个,而是专注于你的正则表达式库将用于什么。不幸的是,除了提到效率之外,你没有说太多。正确开发的库不必因为它具有更多可用功能而效率低下。例如。 PCRE提供了功能丰富的正则表达风格和出色的性能,但它周围有一组有限的库功能(例如,没有搜索和替换)。但是添加更多的库功能(例如搜索和替换)不会使PCRE变慢,因为未使用的调用甚至不必链接到最终的.exe。

没有正则表达式标准。只有经常以微妙方式标榜的惯例。如果“标准”很重要,只需使用一个流行的正则表达式库,即使它不是完美的。

如果你想要一些现成的简约,请挖掘一下Henry Spencer的regex.c副本,它实现了POSIX正则表达式。