• 正则表达式小试牛刀


    闲来无事,打开以前找工作时打印出的资料,说面试官怎么考正则表达式呢?

    实际问题
    比如你进了我们组工作,我们组老大对代码的格式要求很严格,要求左右小括号前后都有空格(仅仅举例)。
    那么我给你一些源代码(c/c++,java),你来检测并修正这些不合规则的代码,你有两天时间,你怎么做?
    简单说,下面(1)是给你的输入(foo.c), (2)是正确的输出。

    (1)  foo (bar ( new Point(x, graph.getY()) ));
    (2)  foo ( bar ( new Point ( x, graph.getY ( ) ) ) ) ;

    答案:
    一条sed命令即可搞定

    1 sed -i -r "s/([^ ])([(|)])/ 1 2/g
    2            s/([(|)])([^ ])/1 2/g" foo.c
    3 
    4 或者放一行(不建议)
    5 sed -i -r  "s/([^ ])([(|)])/1 2/g;s/([(|)])([^ ])/1 2/g" foo.c

    解释:
      sed - 按行处理文件的文字处理工具
       -i - (in place) 替换文件本身
       -r - (regexp-extended) 使用扩展的正则表达式
       () - 分组
       [^abc] - 除a,b,c集合以外的一个字符
       1 - 引用分组, 依次到9
       g - (global)对每一行找到的匹配全部替换
       a|b - 或运算符,匹配两个字符中的一个

    补充说明:

    看了资料上给的"标准"答案:
    1. 使用Unix命令如sed(利用正则表达式)
    2. 其他的编辑器,利用正则表达式替换
    3. 快速写一个ruby脚本
    4. 找个IDE,格式化一下
    任何一种方法,面试者都要解释清楚怎么做的才行。
    例如在vim里面,可以通过两次替换做到(需要注意,()是字符, ()才是正则表达语法, []|都是相同):
              :%s:([(|)])([^ ]):1 2:g
              :%s:([^ ])([(|)]):1 2:g

    更多更全面的正则表达式介绍可以参考博文:
    1. 正则表达式

  • 相关阅读:
    git 合并多个commit
    git 修改 Commit Message
    git rebase 命令介绍
    git 忘记切换分支,误将代码commit到了别的分支的解决方法
    会话层的会话和传输层中的连接的区别
    Goland 安装 k8s 源码 的步骤
    Linux export 命令的作用
    Linux 执行脚本时 source 和 . 和 sh 和 ./ 的区别
    the connection to the server 6443 was refused
    Kubernetes 创建 Pod 时,背后到底发生了什么?
  • 原文地址:https://www.cnblogs.com/xianzhon/p/6246734.html
Copyright © 2020-2023  润新知