Regex 所有正则表达式的通用特性?
我已经看到不同的支持正则表达式的工具/语言(例如perl、sed、java、vim等)的正则表达式功能有很多共同之处,但我也有很多不同之处 是否有所有启用正则表达式的工具/语言都支持的正则表达式功能的标准子集?不同工具/语言之间的正则表达式功能如何变化?Regex 所有正则表达式的通用特性?,regex,language-agnostic,Regex,Language Agnostic,我已经看到不同的支持正则表达式的工具/语言(例如perl、sed、java、vim等)的正则表达式功能有很多共同之处,但我也有很多不同之处 是否有所有启用正则表达式的工具/语言都支持的正则表达式功能的标准子集?不同工具/语言之间的正则表达式功能如何变化? 更详细:比较正则表达式的风格 如果您使用了grep regexp语法,而不是egrep语法,或者sed regexp语法,那么您应该跨许多平台和工具使用一个安全的子集 那么,唯一可能让您感到不快的是,当您在使用有限状态自动机(FSA)的rege
更详细:比较正则表达式的风格
如果您使用了grep regexp语法,而不是egrep语法,或者sed regexp语法,那么您应该跨许多平台和工具使用一个安全的子集 那么,唯一可能让您感到不快的是,当您在使用有限状态自动机(FSA)的regexp实现和使用回溯的regexp实现之间切换时,例如,量词实现将从grep到Perl有所不同 基于FSA的实现将发现从第一个可能的位置开始的最长匹配。回溯会发现左偏的第一个匹配,从第一个可能的位置开始。也就是说,它将按照模式中的顺序尝试每个分支,直到找到匹配项为止
考虑字符串
“XYXYZZ”
,以及模式“(xy)*(xyz)?”
。基于FSA的引擎将匹配最长的子字符串,“xyzyz”
。基于回溯的引擎将匹配左偏的第一个子字符串,“xyxyxy”
大多数正则表达式工具/语言都支持这些:
没有标准的引擎。但是,POSIX扩展正则表达式格式是大多数引擎的有效子集,可能与标准化子集最接近。请参阅emacs的正则表达式语法: 我记得读过这样一篇文章,emacs的语法是一成不变的(出于向后兼容的原因),所以如果您想与所有内容兼容,那么就让所有内容都与此兼容。有些工具可能支持它,有些则可能不支持 虽然您有一个值得追求的目标,但我认为这将非常难以实现,而且我还发现emacs的regexp很难使用。如果让你更快乐、更高效,也许99%的事情都足够好了?一些简单的实现(例如在闪烁/SciTE中)甚至不支持交替或一些量词(?和{})。“非有限决策自动机”。我的电脑只有有限的内存;它是如何容纳一个无限美元的东西的?我想你的意思可能是s/finite/deterministic/g。