到目前为止,所有给出的答案对我来说都是错误的,因为它们执行的是贪婪匹配。在多次出现“否”的行中,它们将匹配最后一个:

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:正则表达式匹配一个字符串相关推荐

  1. vim替换字符串带斜杠_Vim、gvim操作替换

    ~  回复 以下关键词  查看更多IC设计教程 ~ 目前支持的关键词有: Innovus                            ICC or IC CompilerDC or Desi ...

  2. vim替换字符串带斜杠_vim中字符串的替换

    vi/vim 中可以使用 :s 命令来替换字符串 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky : ...

  3. vim替换字符串带斜杠_Linux vi/vim最全使用指南

    > 请关注本头条号,每天坚持更新原创干货技术文章.> 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习. 1. 前言 Linux下的文本编辑器有很多种, ...

  4. vim替换字符串带斜杠_VI中的查找和替换

    本文见介绍linux vi命令替换的使用. vi/vim 中可以使用 :s 命令来替换字符串.以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(linux vi命令真是强大啊,还有很多需要学 ...

  5. linux下使用sed批量替换关键词(带斜杠处理+kaggle路径批量替换)

    source string:/kaggle/input destination string:~/File/hyh/data 命令如下: sed -i "s#/kaggle/input#~/ ...

  6. java正则匹配多个斜杠_正则表达式以匹配JAVA中的两个斜杠

    小编典典 您要匹配的"字符"为: "[/\\\\]" 先为字符串复制反斜杠,然后再为正则表达式复制. 当您需要在也使用反斜杠转义字符串的语言中使用反斜杠时,这可 ...

  7. python把正斜杠替换成反斜杠_【转】python中的正斜杠、反斜杠

    (一)目录中的斜杠们 python读文件需要输入的目录参数,列出以下例子: path = r"C:\Windows\temp\readme.txt" path1 = r" ...

  8. php 网址尾部带斜杠和不带区别,URL路径中带正斜杠/与不带的区别

    简单理解:不带斜杠的URL结尾通常被服务器识别成独立文件,当它去查找这个文件缺失的时候,就会重定向到带斜杠的URL,这个时候带斜杠的URL,可以理解成为是目录. 解读URL结尾斜杠的产生: 举例: - ...

  9. 网址最后面不带斜杠与带斜杠有什么区别

    网址最后面不带斜杠与带斜杠有什么区别 文件与文件夹 解析 URL   关于网址中最后面的那个斜杠 /,很多人习惯性的不输入,原因是他们认为有或者没有没有区别.但这要归功于服务器那端的开发人员的努力.实 ...

最新文章

  1. 数学很差的人能当程序员吗?
  2. oracle 表空间初始分配,在Oracle中创建用户时,若未提及DEFAULT TABLESPACE关键字,则Oracle就将哪个表空间分配给用户作为默认表空间。...
  3. 戏说 Windows GDI (2)
  4. wxpy 实现微信机器人
  5. xmake 新站发布:xmake.io
  6. Oracle 学习笔记(三)
  7. 计算机专业需要学好的数学知识,学好数学对计算机专业重要吗?
  8. 我们为什么会爱上一个人?
  9. android service 访问数据库,XE5 ANDROID通过webservice访问操作MSSQL数据库
  10. 自考本科计算机类专业查询,自考本科学位如何查询
  11. web框架 http协议
  12. 华三 h3c vrrp和监视端口配置
  13. 异常处理 Exceptions
  14. java创建动态数组_动态数组java实现
  15. Spring Boot整合Redis---学习09
  16. C语言将十进制输出二进制、八进制、十六进制的方法总结
  17. linux自动清除超出的文件,Linux下面自动清理超过指定大小的文件
  18. 【高并发编程】再谈同步、异步、阻塞、非阻塞
  19. PostgreSQL 简介
  20. 深入浅出OpenGL三维渲染管线

热门文章

  1. 使php支持pdo_mysql
  2. js几种生成随机颜色方法
  3. install intel c/c++ compiler
  4. 最强JAVA核心技术群
  5. 利用WPF建立自适应窗口大小布局的WinForm窗口
  6. [Toolkit]最新Silverlight Toolkit中的DragDrop支持
  7. Sql 语句:显示 Sql Server 中所有表中的信息
  8. [转载] python数学编程书推荐_图书推荐:《Python数学编程》
  9. 怎样维系和监督多项计划
  10. 捷信达会员管理系统SQL语句相关