正则表达式在各种语言上的实现有很多的区别,所以在使用的过程中常常要注意[1],有的时候需要花挺长时间才能够移植过去。
有没有什么,比较出名的,跨语言的正则表达式实现?
比较,出名的语言应该都支持,例如 Python,Java,C#,JavaScript,Go 等
如果有的话就能够实现一处编写处处运行了。
背景:
在学习的时候,刚开始用的是 PowerShell,发现有很多的表达式在上面运行是有问题的,为了不在这上面浪费时间,最后还是选了和这本书相同的 Python,突然觉得也许会有比较出名的跨平台的实现,如果真是那样的话,那么就好多了,之后用的时候就可以从自己已经写好的表达式中直接复制粘贴,而不用提心吊胆。去谷歌上搜索Cross platform Cross language RegEx
,没看到啥有用的信息,所以准备来问问,也许在 V2EX 有人知道。
[1]:《正则指引》
要知道,一种语言下的正则表达式往往并不能直接套用到另一种语言中
...
本书还涵盖了.NET 、Java 、JavaScript 、PHP 、Python 、Ruby 、Objective-C 、Golang 等常用语言,为每种语言专门撰写相关内容,不但详细介绍了语言中正则表达式的用法,更辨析了版本之间的细微差异,既可以作为专门学习的教材,也可以成为有用的参考手册。
好像找到答案了,Google 有个能跨很多语言的实现
GitHub-shanghai / re2:RE2是一种快速,安全,线程友好的替代方案,可用于回溯正则表达式引擎,例如PCRE,Perl和Python中使用的正则表达式引擎
Python 文档上[^1]有这样的说明,对于处理 Unicode 内容,官方更推荐用第三方模块。
[^1]:See also The third-party regex module, which has an API compatible with the standard library re module, but offers additional functionality and a more thorough Unicode support.另请参阅第三方regex模块,该模块具有与标准库re模块兼容的API,但提供了附加功能和更全面的Unicode支持。
1
acmore 2021-03-10 10:07:19 +08:00
ANTLR 可以满足,但有些大材小用,写配置也有些繁复。
|
2
agagega 2021-03-10 10:09:21 +08:00 via iPhone
很多语言的正则都是 pcre 兼容的
|
3
guyeu 2021-03-10 10:13:54 +08:00
你列的这些语言支持的都是 PCRE 标准的正则吧。。
|
4
hxndg 2021-03-10 10:15:51 +08:00
应该不能把,反正我记得是各种流派都有的
|
5
missdeer 2021-03-10 10:17:13 +08:00
PCRE 吧,很多语言有兼容或绑定
|
6
AndyAO OP 它们并不是兼容的,这个需要特别强调。
|
7
mcfog 2021-03-10 10:25:40 +08:00 1
https://github.com/google/re2
RE2's native language is C++. The Python wrapper is at https://github.com/google/re2/tree/abseil/python and on PyPI ( https://pypi.org/project/google-re2/). A C wrapper is at https://github.com/marcomaggi/cre2/. An Erlang wrapper is at https://github.com/dukesoferl/re2/ and on Hex (hex.pm). An Inferno wrapper is at https://github.com/powerman/inferno-re2/. A Node.js wrapper is at https://github.com/uhop/node-re2/ and on NPM (npmjs.com). An OCaml wrapper is at https://github.com/janestreet/re2/ and on OPAM (opam.ocaml.org). A Perl wrapper is at https://github.com/dgl/re-engine-RE2/ and on CPAN (cpan.org). An R wrapper is at https://github.com/qinwf/re2r/ and on CRAN (cran.r-project.org). A Ruby wrapper is at https://github.com/mudge/re2/ and on RubyGems (rubygems.org). A WebAssembly wrapper is at https://github.com/google/re2-wasm/ and on NPM (npmjs.com). 另外 Go 标准库的正则也是参照 re2 的 |
8
jtsai 2021-03-10 10:29:54 +08:00
我怎么感觉正则在所有语言里都差不多
|
9
AndyAO OP 刚刚看了上面几位说都是这些语言内置的 RegEx 是兼容的,而这显然不可能,如果是这样的话,那么书就不会花这么多时间来特别的说明,RegexBuddy4 这种专门的工具也不会有各种语言的选项设置。
但`PCRE`这个信息挺好,在查询相关的信息,也许这个关键词可以搜出很多能完全兼容的类库。 |
10
AndyAO OP 感觉差不多是很正常的,因为「多」和「少」这些词都很模糊,这个帖子讨论的就是区别。
|
11
AndyAO OP |
12
AndyAO OP 从这里来看 Python 中有个模块就叫 RegEx 提供了很多官方 re 中没有的功能。
本来以为会有人统一的去做这样的模块,现在看来也许并不是这样的,还是有的,只是名字和维护者不相同。 How can I use PCRE regexes from a python script? https://stackoverflow.com/a/23212557 |
13
AndyAO OP mcfog 提供了很好的信息,原来 Python 的 re 是来自 C++ 的 re2,而且有大量的语言也用了这个实现,看来 re2 就是我想找的东西之一,在 .NET 上也可以用。
|
14
AndyAO OP 啊,感觉好像理解错了 Python 的 Re2 是在这里 ,README 上没说内置的是↓
[google-re2 · PyPI]( https://pypi.org/project/google-re2/) |
15
newmlp 2021-03-10 11:31:12 +08:00
搞个 C\C++语言的库就行了,应该没有语言不支持 C\C++库吧
|