【发布时间】:2010-12-01 09:47:12
【问题描述】:
我刚刚偶然发现了一个案例,我必须删除文件中特定正则表达式模式周围的引号,我得出的直接结论是使用 vim 的搜索和替换 util 并转义原始和替换中的每个特殊字符模式。
这行得通(经过一些修补后),但它让我想知道是否有更好的方法来做这些事情。
原始正则表达式(引用):'/^\//' 将替换为 /^\//
我使用的搜索/替换模式:
s/'\/\^\\\/\/'/\/\^\\\/\//g
谢谢!
【问题讨论】:
我刚刚偶然发现了一个案例,我必须删除文件中特定正则表达式模式周围的引号,我得出的直接结论是使用 vim 的搜索和替换 util 并转义原始和替换中的每个特殊字符模式。
这行得通(经过一些修补后),但它让我想知道是否有更好的方法来做这些事情。
原始正则表达式(引用):'/^\//' 将替换为 /^\//
我使用的搜索/替换模式:
s/'\/\^\\\/\/'/\/\^\\\/\//g
谢谢!
【问题讨论】:
您几乎可以使用任何字符作为正则表达式分隔符。这将使您不必逃避正斜杠。您还可以使用组来提取正则表达式并避免重新键入它。例如,试试这个:
:s#'\(\\^\\//\)'#\1#
我不知道这是否适用于您的情况,因为您列出的示例与您提供的正则表达式不匹配。 (您列出的正则表达式将匹配 '/^\//',而不是 '\^\//'。我的将匹配后者。根据需要进行调整。)
【讨论】:
您能否通过使用简单的字符串搜索和替换来完全避免使用正则表达式?
【讨论】:
请检查这是否适合您 - 在此替代表达式之前定义行号或将光标放在它上面:
:s:'\(.*\)':\1:
我为此使用了 vim 7.1。当然,您可以在之前的区域(应执行此表达式(使用“v”或“V”并相应地移动光标))直观地标记一个区域。
【讨论】: