016.科普.正則表達式及文本編輯


題圖:正則表達式,古老的智慧,多用做文本驗證和加工。它看起來迷糊,學起來簡單,用起來神奇。html

016.科普.正則表達式及文本編輯

不等不靠,有囧有料。終日乾乾,或躍在淵。java

正則表達式(RegExp),是攻城獅標配技能,
本期視頻,讓各位獅友40分鐘從精通到入門 :)node

@史榮久 / 2015-05-27 / CC-BY-SA-3.0linux

觀看視頻

內容摘要

■ 文本加工的例子(驗證,提取,替換,分割):git

  • 12個月(1[012]|[1-9]),千分位數\d{1,3}(,\d{3})*
  • CSV文件(標準格式)的域([^",]+|"(?:[^"]|"")+")
  • 只正則,根據SQL生成JavaBean,帶註釋和註解。
  • 不編碼,統計spring-framework源碼,達到如下目標:
  • 一共有多少個開發者(distinct @author)?
  • 每一個開發者參與了多少行代碼(粗略,有author就算)?

■ 正則表達式精要(基本上NFA各流派都適用):github

  • 兩大流派:PCRE(Perl兼容),Posix(BRE和ERE)。
  • 12+元字符^$?+*.\{[(|),2+特殊字符\^+[-]
  • 2種選擇結構:字符串(X|Y|Z),字符[xyz]及否認[^xyz]
  • 字符串多選結構的否認式,須要用環視(零寬斷言)(?!X|Y|Z)
  • 經常使用的字符組dwsb,\p{punct},塊轉義\Q\E(QuotE)。
  • 捕獲組,反向引用,貪婪,非貪婪,量詞,邊界等。
  • .不能匹配換行符,小技巧[\s\S]*[\d\D]*
  • CRLF:[\r\n]+,\r?\n (記憶:return,n-r:a-d)。
  • java的String.replaceAll,split要注意轉義。
  • java的replace時候,要注意替換字符串中的$
  • java的\1$1\k<name>${name}的用法。。
  • java的命名組,反向引用,超過9個引用時。

■ 文本加工的命令(Unix哲學,組合,精專):正則表達式

  • 最牛的linux命令alias cd='rm -rf',玩笑加姿式。
  • 本期命令:grep,find,xargs,sed,uniq,wc
  • ag 超快的文本搜索命令,在700M代碼用表達式不到3秒。
  • linux下,各類轉義的規律(ERE,雙引號,單引號)。
  • MS Window移植:CygwinGnuWin32unxutils

參考資源

■ 正則參考資料(括號內,爲推薦程度):spring

■ 命令參考資料(應該記住,或者常常man):sql

■ 其餘參考資料(Win32移植很犀利,RFC不是KFC):express

歡迎圍觀

if (you.accept(MoilionCircle.SPIRIT)) {
    if(you.haveADL()){
        MoilionCircle we = you.search(MoilionCircle.SLOGAN);
        we.welcome(you);
    }
    if(you.share(this)){
        We.thank(you);
        We.mayFind7Moilion();
    }
}
相關文章
相關標籤/搜索