正则 - vim - 使用 非贪婪模式 匹配字符串

  1. 概述

    1. vim 下的正则非贪婪匹配
  2. 背景

    1. 复习 jvm 相关的内容
    2. 发现得出的信息, 不太友好, 于是想做 格式化
  3. 环境

    1. OS
      1. win10
    2. git-bash
      1. mintty-2.9.4

1. 原始文段

  1. 文段

    Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=1073741824 -XX:+ManagementServer -XX:MaxHeapSize=17163091968 -XX:MaxNewSize=5721030656 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=357564416 -XX:OldSize=716177408 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
    

2. 需求

  1. 将输出文本格式化

    1. 格式要求
      1. Non-default VM flags: 单独成行
      2. 其余的每行, 格式如下 -XX:-BytecodeVerificationLocal
  2. 最终成品

    Non-default VM flags: 
    -XX:-BytecodeVerificationLocal 
    ...
    
    

3. 思路

  1. 使用 ex 表达式
    1. 使用 ex 表达式, 做替换
    2. 替换肯定要涉及到 正则 了

4. 尝试

预处理

  1. 先把 Non-default VM flags: 单独提出来
    1. 后面的格式, 基本都一致了, 处理起来就很轻松

尝试1

  1. 使用 ex 命令

    : s/\(-.* \)/\1\r/g
    
  2. 结果

    1. 发现匹配的内容, 和我预想的不太一样
      1. 除了 最后的那个 -XX 格式, 全都给我匹配上了
      2. 这个和我想的不一样啊....
  3. 思考

    1. 模模糊糊记得, 之前听到过一个 贪婪匹配 的说法
      1. 贪婪匹配
        1. 一次尽量匹配最多内容
        2. 特别是 重复, 嵌套之类的场景, 比较明显
      2. 非贪婪匹配
        1. 一次尽量匹配少的内容

尝试2: 引入非贪婪匹配

  1. 使用 ex 命令

    : s/\(-.\{-} \)/\1\r/g
    
  2. 非贪婪

    1. .
      1. 这个就是对应 .* 的 非贪婪匹配

      2. 匹配结果

        -XX:-BytecodeVerificationLocal
        
      3. 嗯, 符合预期

  3. 最后一个小修饰

    1. 在文本的最后, 加上一个空格
      1. 这样就可以一下把所有行处理完成
  4. 问题

    1. 路径
      1. 触发
        1. 变量里有 路径
        2. 路径里带 空格
      2. 注意
        1. 切割可能会切割下来一段 不完整的路径
        2. 我目前只能人工校验
          1. 应该还是自己太菜了吧...

尝试3: 另一种思路

  1. 使用 ex 命令

    :s/\( -[A-Za-z0-9:-]*\)/\1\r/g
    
  2. 怎么说

    1. 失败的思路

      1. 这个思路粗看有效
      2. 但实际上, 会漏掉很多
    2. 区别

      1. 成功思路
        1. 重点是按照 模式, 进行分割,
        2. 无视了中间的内容, 减少了很多的工作量
      2. 失败思路,
        1. 没有重视 模式, 反倒集中精力在找 内容
        2. 但是忽略了本质
    3. 但是这种思路, 我觉得有的时候, 应该还是能用吧...

      1. 如果找到了, 我会写下来

3. 后续

  1. 匹配 内容 的场景

  2. 同时匹配 内容 和 模式 的场景

    1. 能否一步到位
      2, 还是说, 需要先匹配模式, 再匹配内容
  3. vim 的匹配, 还有很多内容, 后续有缘用到了再说吧

  4. grep, awk, sed 相同场景, 如何处理

ps

  1. ref
    1.VIM中正则的非贪婪匹配
    1. 匹配的思路
    2. vim 相关的语法
    1. 好些我都不知道咋用
    2. ZZ:VIM中正则的非贪婪匹配
    1. 真正的原文
    1. 因为 排版 和 害怕新浪微博没了, 所以有了 ref1
posted @ 2020-04-06 17:41  轩辕拾銉  阅读(1241)  评论(0编辑  收藏  举报