正则表达式在各种语言上的实现有很多的区别,所以在使用的过程中常常要注意[1],有的时候需要花挺长时间才能够移植过去。
有没有什么,比较出名的,跨语言的正则表达式实现?
比较,出名的语言应该都支持,例如 Python,Java,C#,JavaScript,Go 等
如果有的话就能够实现一处编写处处运行了。
背景:
在学习的时候,刚开始用的是 PowerShell,发现有很多的表达式在上面运行是有问题的,为了不在这上面浪费时间,最后还是选了和这本书相同的 Python,突然觉得也许会有比较出名的跨平台的实现,如果真是那样的话,那么就好多了,之后用的时候就可以从自己已经写好的表达式中直接复制粘贴,而不用提心吊胆。去谷歌上搜索Cross platform Cross language RegEx
,没看到啥有用的信息,所以准备来问问,也许在 V2EX 有人知道。
[1]:《正则指引》
要知道,一种语言下的正则表达式往往并不能直接套用到另一种语言中
...
本书抗投诉服务器还涵盖了.NET 、Java 、JavaScript 、PHP 、Python 、Ruby 、Objective-C 、Golang 等常用语言,为每种语言专门撰写相关内容,不但详细介绍了语言中正则表达式的用法,更辨析了版本之间的细微差异,既可以作为专门学习的教材,也可以成为有用的参考手册。
ANTLR 可以满足,但有些大材小用,写配置也有些繁复。
很多语言的正则都是 pcre 兼容的
你列的这些语言支持的都是 PCRE 标准的正则吧。。
应该不能把,反正我记得是各种流派都有的
PCRE 吧,很多语言有兼容或绑定
它们并不是兼容的,这个需要特别强调。
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 的
我怎么感觉正则在所有语言里都差不多
刚刚看了上面几位说都是这些语言内置的 RegEx 是兼容的,而这显然不可能,如果是这样的话,那么书就不会花这么多时间来特别的说明,RegexBuddy4 这种专门的工具也不会有各种语言的选项设置。
但`PCRE`这个信息挺好,在查询相关的信息,也许这个关键词可以搜出很多能完全兼容的类库。
感觉差不多是很正常的,因为「多」和「少」这些词都很模糊,这个帖子讨论的就是区别。
搜索 Python PCRE 能找到宣称更好兼容的库,但是下载量少的可怜
python-pcre · PyPI
https://pypi.org/project/python-pcre
从这里来看 Python 中有个模块就叫 RegEx 提供了很多官方 re 中没有的功能。
本来以为会有人统一的去做这样的模块,现在看来也许并不是这样的,还是有的,只是名字和维护者不相同。
How can I use PCRE regexes from a python script?
https://stackoverflow.com/a/23212557
mcfog 提供了很好的信息,原来 Python 的 re 是来自 C++ 的 re2,而且有大量的语言也用了这个实现,看来 re2 就是我想找的东西之一,在 .NET 上也可以用。
啊,感觉好像理解错了 Python 的 Re2 是在这里 ,README 上没说内置的是↓
[google-re2 · PyPI]( https://pypi.org/project/google-re2/)
搞个 C\C++语言的库就行了,应该没有语言不支持 C\C++库吧