在Emacs的正则表达式,我在做替换,正则表达式,搜索出该如何在Emacs Regexp中替换多个匹配的字符串?
<span class="small">\([^<]+\)</span>\([^<]+\)<span class="small">\([^<]+\)</span>
,并试图用这种
<span class="small">\1\2</span>
我试图以连接来取代它两个匹配的字符串我究竟做错了什么?
在Emacs的正则表达式,我在做替换,正则表达式,搜索出该如何在Emacs Regexp中替换多个匹配的字符串?
<span class="small">\([^<]+\)</span>\([^<]+\)<span class="small">\([^<]+\)</span>
,并试图用这种
<span class="small">\1\2</span>
我试图以连接来取代它两个匹配的字符串我究竟做错了什么?
没有描述它如何不适合你,我只能猜测你打算用\1\3
而不是\1\2
来代替。
第二种可能性是您正在操作的文本与您的正则表达式实际上不匹配。
(switch-to-buffer (get-buffer-create "nst.html"))
(insert "<span class=\"small\">foo</span>bar<span class=\"small\">baz</span>")
(goto-char (point-min))
(replace-regexp
"<span class=\"small\">\\([^<]+\\)</span>\\([^<]+\\)<span class=\"small\">\\([^<]+\\)</span>"
"<span class=\"small\">\\1\\3</span>")
在缓冲区中尝试M-x undo
以查看替换操作之前的样子。
(我想失去文本\2
是你的意图?)
此外,由于它们不使用\ 2,第二个匹配器部分不需要围绕它的\(和\)。然后\ 1 \ 2将工作。 – 2013-04-26 05:14:30
我看到你有一堆的正则表达式的问题。我强烈推荐使用'M-x re-builder'(又名'regexp-builder'),它可以让你交互地构建一个regexp,同时动态地显示你(在你调用的缓冲区中)模式和每个子组匹配的内容。有关文档,请参阅'M-x find-library RET重新构建器RET'中的注释,以及使用重构器缓冲区中的'C-h m'来查看可用的键绑定。你*需要确保你理解不同的语法 - 特别是“读”与“字符串” - 否则反斜杠可能会导致混淆。 – phils 2013-04-25 20:52:01
@phils谢谢,你是对的,正则表达式生成器真的很有帮助。 – incandescentman 2013-04-26 05:26:10