有人可以解释为什么这个Emacs regexp
find_class \(\w+|([^)]+)\) \(\w+|([^)]+)\)
在这些行中都不匹配?
let _, scn, _ = find_class (obj :: cs) c in scn
aux (find_class (obj :: cs) scn) (cn :: desc)
let _, scn, ms = find_class c cs in
看起来很简单:我正在寻找函数的调用,其中参数可以显示为单个单词或带括号的arbirary字符串。当我将一个等效的表达式(find_class (\w+|\([^)]+\)) (\w+|\([^)]+\))
)插入Ruby时,它会做我想要的,但不是这里。我错过了什么吗?
我发现Emacs的regexp在实际使用中非常麻烦,我正在重新考虑我选择的编辑器。如果有一种合理的方法来改善这一点(即更简洁的语法,更多的字符类),我很想听到它,但我还没有找到任何东西。
答案 0 :(得分:3)
我认为你需要在emacs regex中使用\|
来实现与Ruby中的|
相同的效果。
答案 1 :(得分:3)
Re:麻烦,看看Emacs的regexp文档会有所帮助:
http://www.gnu.org/software/emacs/manual/html_node/elisp/Syntax-of-Regexps.html
第3节“Regexp反斜杠”,包含了nhahtdh已经指出的问题的答案。不要忘记Emacs的正则表达式语法早于POSIX标准。
答案 2 :(得分:1)
此链接显示了Emacs正则表达式与大多数其他正则表达方式的不同之处: