正则表达式小试牛刀
閑來無事,打開以前找工作時打印出的資料,說面試官怎么考正則表達式呢?
實際問題:
比如你進了我們組工作,我們組老大對代碼的格式要求很嚴格,要求左右小括號前后都有空格(僅僅舉例)。
那么我給你一些源代碼(c/c++,java),你來檢測并修正這些不合規則的代碼,你有兩天時間,你怎么做?
簡單說,下面(1)是給你的輸入(foo.c), (2)是正確的輸出。
(1)? foo (bar ( new Point(x, graph.getY()) ));
(2)? foo ( bar ( new Point ( x, graph.getY ( ) ) ) ) ;
答案:
一條sed命令即可搞定
?
解釋:
? 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.有錯別字但講得挺全面: http://www.cnblogs.com/helloczh/articles/1648029.html
轉載于:https://www.cnblogs.com/xianzhon/p/6246734.html
總結
                            
                        - 上一篇: Android studio 导入mod
 - 下一篇: @Value(${xxxx})注解的配置