初學正則表達式

  前言:

    在學正則表達式之前,有小伙伴講解說,正則表達式在文本處理上功能非常強大、使用非常普遍,并且現在很多的工具軟件都支持它,以后的學習工作中會經常使用,非常靈活,但是靈活的同時又是繁瑣,需要小心翼翼的仔細推敲。抱著認真、好奇的心思聽完了王老的課。我自己理解的正則表達式是,給一些符號賦予一定的涵義,代表一個我們規定的特殊涵義,然后通過我們的要求的字段進行這些字符的組合,組合成符合我們條件的一個字符表達式,然后用這個字符條件表達式去目的文本中對應搜索,有匹配的就顯示標記出來。學習之后,感覺確實非常靈活和強大,各種的文本中會出現的符號都給予了定義,能通過這些字符進行靈活的排列組合,得到我們想要的字段。但是在強大和靈活的同時,感覺又比較繁瑣,各種符號的組合。感覺應該是一個需要經常訓練,熟能生巧的一個知識,就好像上學時候的題海戰術,用的多了,練得多了,見得多了,用起來應該會比較順手和靈活的。自己感覺這個知識點要多做多練多看多學習,由于組合太多,也許能夠通過組合得到相應的目的表達式,但是這么靈活的正則表達式,難道沒有更簡潔更直觀更有趣的排列組合方式嗎,只能通過多看多做多練習,慢慢體味其中排列組合的樂趣。

   正則表達式是通過一些特殊字符的排列,用以查找、替換、刪除一行或多行文字字符串,通俗的說,正則表達式就是用在字符串的處理上面的一項“表達式”

   在學習正則表達式之前,先看看支持正則表達式的幾個命令,首先是支持基本正則表達式的命令grep,然后是擴展正則表達式egrep和fgrep

一、都支持的常用特殊字符

    [:alnum:]  表示所有字母和數字,包括大小寫和數字

    [:alpha:]  表示所有字母,包括大小寫

    [:lower:]  表示所有小寫英文字母

    [:upper:]  表示所有大寫英文字母

    [:punct:]  表示所有標點字符

    [:digit:]  表示所有數字

    [:space:]  表示所有能產生空白的字符,包括空格、tab鍵、CR等

二、基本正則表達式

1、grep

  用法  grep [Option] pattern file

    這其中的pattern,就是我們通過那些特殊涵義的字符組合出來的條件表達式

  常用選項

    -i,–ignore-case,忽略字符的大小寫

    -v,–invert-match,顯示那些沒有被匹配到的文本

    -c,–count,計算匹配到的行數

    -o,–only-match,只顯示被匹配到的字段

    -n,–line-number,顯示匹配到的行號

    -q,–quiet,靜默模式,不輸出匹配信息

    -e,實現多個選項之間的邏輯“或”的關系

    -A#,–after,顯示匹配到的后#行

    -B#,–before,顯示匹配到的前#行

    -C#,context,顯示匹配到的前后各#行

    -E,egrep

注意:grep在數據中查找一個字符串時,是以整行為單位進行數據選取的,會把含有字符串的行顯示出來,不含有字符串的行不會顯示

2、基本正則表達式元字符

   (1)字符匹配

    .   匹配任意單個字符  

    []   匹配指定范圍之內的任意單個字符

    [^]   匹配指定范圍之外的任意單個字符

   (2)次數匹配

    *    匹配前面的字符任意次數,包括0次

    \?    匹配前面的字符0次或1次

    \+    匹配前面的字符至少一次

    .*    匹配任意字符任意次數

    \{m\}  匹配前面的字符m次

    \{m,n\} 匹配前面的字符[m,n]次

    \{m, \} 匹配前面的字符[m,+∞)次

    \{ ,n\} 匹配前面的字符[0,n]次

   (3)位置錨定:定位出現的位置

    ^    行首錨定,放在字符的前面,定位字符在行首位置

    $    行尾錨定,放在字符的后面,定位字符在行尾位置

    \<或\b 詞首錨定,用在單詞的最左側

    \>或\b 詞尾錨定,用在單詞的左右側

    ^$   匹配整行為空行

    ^pattern$   用于模式匹配整行

    \<pattern\>或者\bpattern\b   匹配整個單詞

   (4)分組

    \(\)  將一個或多個字符捆綁在一起,當作一個整體進行處理,\(pattern\)\+

    分組括號中的模式匹配到的內容會被正則表達式引擎記錄與內部的變量中,這些變量的命名方式為:\1,\2…

     \1  從左側其,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符

    后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)

 

二、egrep及擴展正則表達式

    egrep=grep -E

  用法: egrep [options] pattern [file]…

擴展正則表達式的原字符

   (1)字符匹配

    .    匹配任意單個字符

    []    指定范圍的單個字符

    [^]    指定范圍之外的單個字符

   (2)次數匹配

    *    前面字符任意次數,包括0次

    ?    0次或1次

    +    至少1次,[1,+∞)

    {m}    匹配m次

    {m,n}   匹配[m,n]次

   (3)位置錨定

    ^    行首

    $    行尾

    \< ,\b  詞首

    \> ,\b  詞尾

   (4)分組  ()  ,后向引用  \1 ,\2…

   (5)或 邏輯組合  |

    a|b = a+b

    A|abc = A+abc

    (A|a)bc = Abc+abc

    

原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/29478

(0)
black_fishblack_fish
上一篇 2016-08-12 09:02
下一篇 2016-08-12 09:02

相關推薦

  • M22 xfs文件系統命令總結

    Centos6.0及之前的默認文件系統是ext系列的,而在最新的Centos7上卻使用了xfs作為默認的文件系統。在Centos7中xfs文件系統包括如下命令: xfs_admin:修改xfs文件系統的參數,需要先卸載分區 用法:xfs_admin [ -eflpu ] [ -c 0|1 ] [ -L label ] [ -U uuid ] device x…

    Linux干貨 2017-03-16
  • CentOS 7網絡屬性配置

    傳統命名:以太網eth[0,1,2,…], wlan[0,1,2,…] 可預測功能 udev支持多種不同的命名方案: Firmware, 拓撲結構 (1) 網卡命名機制 systemd對網絡設備的命名方式: (a) 如果Firmware或BIOS為主板上集成的設備提供的索引信息可用,且可預測則根據此索引進行命名,例如eno1; (b)…

    Linux干貨 2015-05-28
  • 馬哥教育網絡班21期第10周課程練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) POST加電自檢—— 根據bios設定,順序查找引導設備—— 讀取引導設備MBR(共512字節,前446為bootloader,后64表示分區信息,后2表示bootloader有效性),加載bootloader程序—— 以grub為例,grub1.0階段將零磁道一扇區加載到內存,gr…

    Linux干貨 2016-10-24
  • 關于大型網站技術演進的思考(十)–網站靜態化處理—動靜整合方案(2)

    原文出處: 夏天的森林    上篇文章我簡要的介紹了下網站靜態化的演進過程,有朋友可能認為這些知識有點過于稀松平常了,而且網站靜態化的技術基點也不是那么高深和難以理解,因此它和時下日新月異的web前端技術相比,就顯得不倫不類了。其實當我打算寫本系列的之前我個人覺得web前端有一個點是很多人都知道重要,但是有常常低估它作用的,那就…

    2015-03-11
  • 編譯安裝dropbear和使用

    一、概念 Dropbear是一個相對較小的SSH服務器和客戶端。它運行在一個基于POSIX的各種平臺。 Dropbear是開源軟件,在麻省理工學院式的許可證。 Dropbear是特別有用的“嵌入”式的Linux(或其他Unix)系統,如無線路由器。 二、功能 dropbear實現完整的SSH客戶端和服務器版本2協議。它不支持SSH版本1 的向后兼容性,以節省…

    Linux干貨 2016-10-04
  • httpd的安裝與使用

    httpd的安裝與使用

    2017-12-07
欧美性久久久久