vim替换字符串带斜杠_Vim:正则表达式匹配一个字符串
到目前为止,所有给出的答案对我来说都是错误的,因为它们执行的是贪婪匹配。在多次出现“否”的行中,它们将匹配最后一个:
YES YES YES YES no YES YES no YES
^^^^^^^^^^^^^^^^^^^^^^^^^^^
但是,将所有内容匹配为一个字符串的目的通常是在第一次出现时就停止:
YES YES YES YES no YES YES no YES
^^^^^^^^^^^^^^^^
为此,请使用non-greedy正则表达式,例如:
.\{-}\(no\)\@=
\{-}是乘数*的非贪婪替代(请参阅:help non-greedy)。 \@=是一个积极的前瞻性,它将检查是否跟随“ no”,但不会将其包括在比赛中(请参阅:help /\@=)。
作为一个旁注,“将所有内容匹配到一个字符串”的常见方案是将一个带有开始和结束定界符的表达式匹配。例子:
C风格的字符串文字"string literal";
C ++样式的注释// comment\n(其结束定界符是换行符);
正则表达式/regex/。
在许多此类情况下,结束分隔符实际上可能在要匹配的表达式内出现escaped。例如:
C样式的字符串文字可能包含双引号字符,在这种情况下,它必须像\"中那样转义。
在C ++注释中,以反斜杠开头的换行符将被忽略,其副作用是注释在下一行继续。
正则表达式可以包含斜杠;在对正则表达式的语法过于简化的情况下,我们可以假定所有此类出现都像在\/中那样被转义了(这是不正确的,例如/[abc/]/也是一个有效的Vim regex,它与任何“ a”,“ b”,“ c”,“ /”之间的字符)。
因此,我们必须优化正则表达式,以使其不会在结束分隔符的转义出现时停止。
让我们从错误的正则表达式开始,该正则表达式匹配开始定界符“ start”和结束定界符“ stop”之间的任何内容(由于\@<=和正前瞻\@=):
\(start\)\@<=\_.\{-}\(stop\)\@=
任何“停止”事件都将停止,即使逃脱也是如此:
test start test \stop test stop test
^^^^^^^
要解决此问题,我们可以将\_.(与任何字符,包括换行符匹配)替换为\_[^\\](与任何字符但反斜杠匹配)和\\\_.(匹配反斜杠,后跟任意字符)。这意味着任何未转义的反斜杠将被解释为转义序列的开始。反斜杠本身可以转义,因此\\stop是转义的反斜杠,后跟一个真正的结束定界符。
这是盲文表达形式:
\(start\)\@<=\(\_[^\\]\|\\\_.\)\{-}\(stop\)\@=
和一些测试:
test start test \stop test stop test
^^^^^^^^^^^^^^^^^
test start test \\stop test stop test
^^^^^^^^
test start test \\\stop test stop test
^^^^^^^^^^^^^^^^^^^
vim替换字符串带斜杠_Vim:正则表达式匹配一个字符串相关推荐
- vim替换字符串带斜杠_Vim、gvim操作替换
~ 回复 以下关键词 查看更多IC设计教程 ~ 目前支持的关键词有: Innovus ICC or IC CompilerDC or Desi ...
- vim替换字符串带斜杠_vim中字符串的替换
vi/vim 中可以使用 :s 命令来替换字符串 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky : ...
- vim替换字符串带斜杠_Linux vi/vim最全使用指南
> 请关注本头条号,每天坚持更新原创干货技术文章.> 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习. 1. 前言 Linux下的文本编辑器有很多种, ...
- vim替换字符串带斜杠_VI中的查找和替换
本文见介绍linux vi命令替换的使用. vi/vim 中可以使用 :s 命令来替换字符串.以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(linux vi命令真是强大啊,还有很多需要学 ...
- linux下使用sed批量替换关键词(带斜杠处理+kaggle路径批量替换)
source string:/kaggle/input destination string:~/File/hyh/data 命令如下: sed -i "s#/kaggle/input#~/ ...
- java正则匹配多个斜杠_正则表达式以匹配JAVA中的两个斜杠
小编典典 您要匹配的"字符"为: "[/\\\\]" 先为字符串复制反斜杠,然后再为正则表达式复制. 当您需要在也使用反斜杠转义字符串的语言中使用反斜杠时,这可 ...
- python把正斜杠替换成反斜杠_【转】python中的正斜杠、反斜杠
(一)目录中的斜杠们 python读文件需要输入的目录参数,列出以下例子: path = r"C:\Windows\temp\readme.txt" path1 = r" ...
- php 网址尾部带斜杠和不带区别,URL路径中带正斜杠/与不带的区别
简单理解:不带斜杠的URL结尾通常被服务器识别成独立文件,当它去查找这个文件缺失的时候,就会重定向到带斜杠的URL,这个时候带斜杠的URL,可以理解成为是目录. 解读URL结尾斜杠的产生: 举例: - ...
- 网址最后面不带斜杠与带斜杠有什么区别
网址最后面不带斜杠与带斜杠有什么区别 文件与文件夹 解析 URL 关于网址中最后面的那个斜杠 /,很多人习惯性的不输入,原因是他们认为有或者没有没有区别.但这要归功于服务器那端的开发人员的努力.实 ...
最新文章
- 数学很差的人能当程序员吗?
- oracle 表空间初始分配,在Oracle中创建用户时,若未提及DEFAULT TABLESPACE关键字,则Oracle就将哪个表空间分配给用户作为默认表空间。...
- 戏说 Windows GDI (2)
- wxpy 实现微信机器人
- xmake 新站发布:xmake.io
- Oracle 学习笔记(三)
- 计算机专业需要学好的数学知识,学好数学对计算机专业重要吗?
- 我们为什么会爱上一个人?
- android service 访问数据库,XE5 ANDROID通过webservice访问操作MSSQL数据库
- 自考本科计算机类专业查询,自考本科学位如何查询
- web框架 http协议
- 华三 h3c vrrp和监视端口配置
- 异常处理 Exceptions
- java创建动态数组_动态数组java实现
- Spring Boot整合Redis---学习09
- C语言将十进制输出二进制、八进制、十六进制的方法总结
- linux自动清除超出的文件,Linux下面自动清理超过指定大小的文件
- 【高并发编程】再谈同步、异步、阻塞、非阻塞
- PostgreSQL 简介
- 深入浅出OpenGL三维渲染管线