我正在尝试执行search and replace with regexs。使用Emacs替换正则表达式
假设我有一个foreach(foo1.txt, foo2.txt, foo3.txt, foo4.txt)
。 我想提出“围绕每个项目列表中的
我从文档以为 - - 这正则表达式将工作 (foo[1-4]\.txt) -> "\&"
但它确实不是我做错了
。?我正在尝试执行search and replace with regexs。使用Emacs替换正则表达式
假设我有一个foreach(foo1.txt, foo2.txt, foo3.txt, foo4.txt)
。 我想提出“围绕每个项目列表中的
我从文档以为 - - 这正则表达式将工作 (foo[1-4]\.txt) -> "\&"
但它确实不是我做错了
。?注意括号和圆括号需要转义( “多余的斜线”)在搜索正则表达式,但不在替换正则表达式。
转义是必需的,因为lisp解析器在正则表达式引擎之前看到正则表达式。但是,如果你以编程方式编写(而不是交互式输入),你需要逃避逃跑! AY-奕奕....
interactive:
M-x replace-regexp RET \(obj.method(.*)\{1\}\) RET trim$(\1)
programmatic:
(replace-regexp "\\(obj.method(.*)\\{1\\}\\)" "trim$(\\1)")
逃脱的括号被转义,因为它们分组,转义括号是字面上的括号。
您可能想查看Emacs Wiki Regex Crash Course和Steve Yegge's Effective Emacs regex section。
尝试是这样的\(foo[1-4]\.txt\)
Emacs的正则表达式总是赶我出去,COS他们没有的Perl:
\(foo[1-4]\.txt\)
你需要在Emacs的括号中反斜杠。
你已经得到了关于正则表达式的正确答案,但在这种情况下,它可能会更容易使用宏。把点放在第一个名称的开头,然后输入:
C-x (" M-f M-f " C-f C-f C-x)
也就是说,开始录制宏,插入报价,前锋去两个字,插入引用,转发去的两个字符的下一个元素,并停止录制宏。
然后用C-x e
运行宏。重复一遍,再次点击e
。
(在Emacs的23,你可以用F3代替 'C-x (
',和F4,而不是两个 'C-x)
' 和 'C-x e
'。)
有帮助,但有点可怕。 “逃避逃跑”。 MEEP。 – 2009-06-30 15:16:00