正则表达式的HTML搜索和替换

正则表达式的HTML搜索和替换

问题描述:

我正在做一个简单的搜索和替换命令在Vim中,我试图逃避<>/字符,所以我可以在我的搜索表达式中使用它们。我意识到有更多优雅的方式来寻找HTML标签,但我真正想要的是一个本地化的搜索和替换命令,将取代<h1>UNKNOWN MISSION</h2><h2>UNKNOWN MISSION</h2>。这里是我的命令,我试图逃避特殊字符:正则表达式的HTML搜索和替换

:%s/\<h1\>UNKNOWN MISSION\<\/h2\>/\<h2\>UNKNOWN MISSION\<\/h2\>/ 

模式不匹配。有任何想法吗?

+0

难道你不能用'h2'替换'h1'吗?文档中不应包含包含该字符组合的其他文本。你可以按行查找和替换,以便你(可能)不会干扰'h1'的其他事件。 – mjgpy3 2013-03-25 19:57:23

+0

由于奇怪的原因,头文件分散在整个文档中,并且还有其他h1和h2实例,因此逐行或仅将h1替换为h2是有问题的。 – user1427661 2013-03-25 19:58:53

:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/g

似乎是为我工作。你只需要避开反斜杠。

+0

正如@romainl在下面所说的那样,使用另一个分隔符可以消除“/'转义。另外,如果替换中的内容很少,则可以使用'\ zs'和'\ ze'来标记匹配文本的开始和结束,以便替换变得更简单。 ':%s# UNKNOWN MISSION#2#g'如需更多帮助,请参阅':h \ zs' – 2013-03-25 21:01:30

你不需要逃避<>字符,请尝试以下操作:

:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/ 

我会做以下...

  1. 将光标放在的UNKNOWN MISSION与第一个实例:

    /<h1<CR> 
    
  2. 猛拉直到2有:

    yt2 
    
  3. 替换为:

    :%s+<C-r>"2>+<C-r>"1> 
    

    其中<C-r>"用于插入缺省寄存器的命令行的内容和+被用作替代分离器,以避免逃逸斜线。插入后,整个命令如下:

    %s+<h1>UNKNOWN MISSION</h2>+<h1>UNKNOWN MISSION</h1> 
    

添加/g标志,如果你需要它。