我正在为R中的工作创建正则表达式,使用Emacs中的ESS作为我的环境。 R本身使用PCRE engine,它是用C和C ++编写的。
问题
我想知道,如果我将代码发送给其他人,使用不同版本的R,也许是在一个完全不同的环境中,RegEx的工作方式是否完全相同?你经常面对这样的问题吗?你有没见过一个?
逻辑告诉我,如果这个人正在运行我的代码,那么他们正在使用相同的编译器等。(当然你不会在某种R shell以外的任何东西中运行R代码!) - 但是有些我读过的东西让我质疑这个逻辑。
我的发现
this site可能很清楚答案,但我不明白这一点。以下是StackOverflow regex
tag
Perl编程语言具有Henry Spencer正则表达式库的显着修改和增强版本。随着Perl v5的发布,引入了进一步的增强功能,包括前瞻,外观,非提交匹配,非捕获组等。通过Philip Hazel的库重新实现PCRE,这些功能可以在许多其他编程语言中使用,包括但不限于PHP,Python和R.因此,Perl兼容的正则表达式是广泛使用的正则表达式的第三种主要方言
然后看起来PCRE很好,但是我应该担心我在Emacs中,而其他人可能会在另一个文本编辑器中读取我的代码(该文本继续提到这个问题)?
额外信息
作为compatibility issue的一个可能示例:我在查看我的巨大文本文件时使用Emacs中的re-builder
函数,所以我在迷你中输入我的正则表达式-buffer和匹配在上面显示的文本中突出显示。我终于钉了它,把这个正则表达式粘贴到我的R代码中......繁荣......它没有完成任务。
也许这将成为我在R(gsub
)中使用的实际函数的一个问题,但它仍然表明存在兼容性问题。这是R中失败的函数,但在Emacs're-builder
:
gsub("http:.*?[([:space:])| |\n]", "", x))