首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在不同的编程语言中使用相同的正则表达式?

如何在不同的编程语言中使用相同的正则表达式?
EN

Stack Overflow用户
提问于 2011-12-22 03:12:19
回答 3查看 1.2K关注 0票数 16

我见过this question,经验告诉我每种语言似乎都支持一种不同的正则表达式方言。我认为这个问题已经存在很长一段时间了,所以一定有人想要做点什么。

我有一个非常大的项目,涉及JavaScript、Ruby和Java,它们都必须使用相同的正则表达式。我们选择Java作为我们的“官方”RE解释器,这意味着每当其他两种语言需要计算RE时,它们都必须以某种方式将其传递给Java程序,这开始增加了大量的开销。

如果我可以选择任何一种RE方言,并至少从所有语言中半原生地调用它,这将是我们向前迈出的一大步。这个是可能的吗?它已经在做了吗?我们研究了PCRE,从技术上讲,可以通过Java和Ruby的本地绑定调用它(尽管它将JS排除在外),但我还没有发现有人真正在这么做。我们是孤身一人吗?

ETA:我没有提到的一个问题是,这个系统应用了用户提供的regex。(是的,我知道这是一个security issue等,但它是供受信任的、有属性的用户内部使用的。)我当然可以建议列出一个“不要这样做”的功能列表来避免,但我有点希望这不是最好的解决方案。

EN

回答 3

Stack Overflow用户

发布于 2011-12-22 03:17:28

你在帖子中隐含提到的方言并没有太大的不同,有些东西是由一种方言支持的,而另一种是不支持的,但这通常不会造成任何问题,除非你正在编写专门针对其中一种方言的正则表达式。

您可以在以下链接中的表格中看到这些方言之间的差异:

它们之间的主要区别是正则表达式更“高级”的特性。如果你不使用这些工具,你就会处于安全地带。

由于python和java都有可用于执行原生javascript的模块,您可以说所有的表达式都应该是为javascript编写的,然后让未来的开发人员使用他们可以使用的模块,以确保regexp ran总是以完全相同的方式运行。

尽管我只是记录了您的应用程序,说明无论使用什么正则表达式都需要所有三种语言的支持,然后将它们指向一个表(例如前面链接的那个),说明它们应该查找可用的。

..or你可以编译你自己的列表/表格。

票数 11
EN

Stack Overflow用户

发布于 2011-12-22 03:20:11

这些方言都略有不同,但它们几乎在所有主要方面都有重叠。(主要区别不在于正则表达式本身,而在于调用它们的方式(一种语言的find是另一种语言的matches,依此类推)以及对正则表达式文字的支持(一种语言的//是另一种语言的原始字符串是另一种语言的反斜杠字符串)。

与其以某种方式让JavaScript支持Java特性,反之亦然,我认为更好的办法是将自己限制在所有三种语言中通用的巨大正则表达式子集中,并使用单元测试来确保您的正则表达式在所有三种语言中的行为相同。

票数 1
EN

Stack Overflow用户

发布于 2012-07-15 02:27:22

一种(重量级)选项是构建一个"regexp交叉编译器“,它可以接受以某种规范形式编写的正则表达式作为输入(例如,作为Perl正则表达式),然后将其扫描并解析到语法树中,并输出其他语言(例如,Python或Java)的等效正则表达式。这将使您只需编写一次正则表达式,它就可以在任何地方工作,因为编译器将完成所有格式之间的转换工作。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8595037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档