有没有什么“跨语言”的正则表达式(RegEx)实现? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
AndyAO
V2EX    程序员

有没有什么“跨语言”的正则表达式(RegEx)实现?

  AndyAO 2021 年 3 月 10 日 2440 次点击
这是一个创建于 1853 天前的主题,其中的信息可能已经有所发展或是发生改变。

正则表达式在各种语言上的实现有很多的区别,所以在使用的过程中常常要注意[1],有的时候需要花挺长时间才能够移植过去。

有没有什么,比较出名的,跨语言的正则表达式实现?

比较,出名的语言应该都支持,例如 Python,Java,C#,Javascript,Go 等

如果有的话就能够实现一处编写处处运行了。


背景: 在学习的时候,刚开始用的是 PowerShell,发现有很多的表达式在上面运行是有问题的,为了不在这上面浪费时间,最后还是选了和这本书相同的 Python,突然觉得也许会有比较出名的跨平台的实现,如果真是那样的话,那么就好多了,之后用的时候就可以从自己已经写好的表达式中直接复制粘贴,而不用提心吊胆。去谷歌上搜索Cross platform Cross language RegEx,没看到啥有用的信息,所以准备来问问,也许在 V2EX 有人知道。


[1]:《正则指引》

要知道,一种语言下的正则表达式往往并不能直接套用到另一种语言中

...

本书还涵盖了.NET 、Java 、Javascript 、PHP 、Python 、Ruby 、Objective-C 、Golang 等常用语言,为每种语言专门撰写相关内容,不但详细介绍了语言中正则表达式的用法,更辨析了版本之间的细微差异,既可以作为专门学习的教材,也可以成为有用的参考手册。

第 2 条附言    2021 年 3 月 12 日

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支持。

15 条回复    2021-03-10 11:31:12 +08:00
acmore
    1
acmore  
   2021 年 3 月 10 日
ANTLR 可以满足,但有些大材小用,写配置也有些繁复。
agagega
    2
agagega  
   2021 年 3 月 10 日 via iPhone
很多语言的正则都是 pcre 兼容的
guyeu
    3
guyeu  
   2021 年 3 月 10 日
你列的这些语言支持的都是 PCRE 标准的正则吧。。
hxndg
    4
hxndg  
   2021 年 3 月 10 日
应该不能把,反正我记得是各种流派都有的
missdeer
    5
missdeer  
   2021 年 3 月 10 日
PCRE 吧,很多语言有兼容或绑定
AndyAO
    6
AndyAO  
OP
   2021 年 3 月 10 日
它们并不是兼容的,这个需要特别强调。
mcfog
    7
mcfog  
   2021 年 3 月 10 日   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 的
jtsai
    8
jtsai  
   2021 年 3 月 10 日
我怎么感觉正则在所有语言里都差不多
AndyAO
    9
AndyAO  
OP
   2021 年 3 月 10 日
刚刚看了上面几位说都是这些语言内置的 RegEx 是兼容的,而这显然不可能,如果是这样的话,那么书就不会花这么多时间来特别的说明,RegexBuddy4 这种专门的工具也不会有各种语言的选项设置。

但`PCRE`这个信息挺好,在查询相关的信息,也许这个关键词可以搜出很多能完全兼容的类库。
AndyAO
    10
AndyAO  
OP
   2021 年 3 月 10 日
感觉差不多是很正常的,因为「多」和「少」这些词都很模糊,这个帖子讨论的就是区别。
AndyAO
    11
AndyAO  
OP
   2021 年 3 月 10 日
搜索 Python PCRE 能找到宣称更好兼容的库,但是下载量少的可怜

python-pcre PyPI

https://pypi.org/project/python-pcre
AndyAO
    12
AndyAO  
OP
   2021 年 3 月 10 日
从这里来看 Python 中有个模块就叫 RegEx 提供了很多官方 re 中没有的功能。
本来以为会有人统一的去做这样的模块,现在看来也许并不是这样的,还是有的,只是名字和维护者不相同。

How can I use PCRE regexes from a python script?
https://stackoverflow.com/a/23212557
AndyAO
    13
AndyAO  
OP
   2021 年 3 月 10 日
mcfog 提供了很好的信息,原来 Python 的 re 是来自 C++ 的 re2,而且有大量的语言也用了这个实现,看来 re2 就是我想找的东西之一,在 .NET 上也可以用。
AndyAO
    14
AndyAO  
OP
   2021 年 3 月 10 日
啊,感觉好像理解错了 Python 的 Re2 是在这里 ,README 上没说内置的是↓

[google-re2 PyPI]( https://pypi.org/project/google-re2/)
newmlp
    15
newmlp  
   2021 年 3 月 10 日
搞个 C\C++语言的库就行了,应该没有语言不支持 C\C++库吧
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2525 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 27ms UTC 15:33 PVG 23:33 LAX 08:33 JFK 11:33
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86