正則表達式入門

正則表達式入門

談到正則表達式,我們就得先了解一下POSIX。POSIX的全稱是Portable Operating System Interface for
uniX
,它由一系列規范構成,定義了UNIX,linux操作系統應當支持的功能,它定義了BREBasic Regular Expression,基本型正則表達式)和EREExtended Regular Express,擴展型正則表達式)兩大流派。

正則表達式由只代表自身的字面值和代表特定含義的元字符組成,除非特別說明,正則表達式嚴格區分大小寫。正則表達式的大致匹配過程是:

1.依次拿出表達式和文本中的字符比較,

2.如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。

3.如果表達式中有量詞或邊界,遵循量詞或邊界指定的規則來匹配。

正則表達式入門

基礎正則表達式中,如果你想使用? + () {},因為他們表示特殊含義,所以你需要將他們轉義

而擴展正則表達式中,如果你想使用? + () {} ,就沒必要加“\”了,進化版的正則表達式在這方面給我們提供了很大的便利正則表達式入門

所謂特殊含義,就是正則表達式中的含義。非特殊含義,就是這個符號本身。

+,*中大家會遇到貪婪模式的說法,也有稱最長匹配原則,本質就是趨向于最大長度匹配。”.*”這個組合幾乎可以匹配所有,貪婪性赤裸裸的暴露出來了。

基本正則表達式(BRE

字符匹配

(匹配的時候需要使用兩個方括號,如[[ :alpha:]])
    .  表示任意單個字符,.會匹配除了換行符的任意字符
    [ ]   表示匹配范圍內的任意單個字符
    [^ ]  表示匹配范圍外的任意單個字符
    [:alpha:]   任意一個字母(相當于a-zA-Z)
    [:upper:]  任意一個大寫字母(相當于A-Z)
    [:lower:]  任意一個小寫字母(相當于a-z)
    [:digit:]   任意一個數字(相當于0-9)
    [:space:]  水平和垂直的空白字符(比blank包含的更多)
    [:blank:]   空白字符(空格和制表符)
    [:punct:]  標點符號
    [:alnum:]   任意字母和數字(相當于0-9a-zA-Z)
    [:print:]   可打印字符

匹配次數

    *   表示*號前面的一個字符的0-N次(它有一個貪婪模式,會盡量匹配最長)
    .*   表示任意多個長度的字符
    \?    表示\?符號前的字符0-1次
    \+     匹配\+前的字符至少1次
    \{m,n\}    表示\{m,n\}符號前的字符的m-n次
    \{m\}     表示{m\}符號前的字符m次
    \{n,\}     表示匹配前面字符至少n次
    \{,n}      表示匹配前面字符最多n次

位置錨定

    ^ 之后接字符    表示^ 之后的字符出現在行首
    $ 之前接字符    表示$之前的字符出現在行尾
    \> 表示\> 符號之后的字符出現在單詞的尾部
    \< 表示\< 之前的字符出現在單詞的首部
    \<字符 \>      表示只有小于號和大于號之間的字符

分組

    分組 : \(\) 將一個或多個字符捆綁在一起,當作一個整體進行處理,如 : \(root\)+
    后向引用 : 引用前面的分組括號中的模式所匹配字符,而非模式本身
 
    或者 : \|

拓展正則表達式(ERE

字符匹配

    .  表示任意單個字符,.會匹配除了換行符的任意字符
    []   匹配指定范圍內的任意單個字符
    [^]  匹配指定范圍外的任意單個字符
    [ :alnum : ]   字母和數字
    [ :alpha : ]   代表任何英文大小寫字符,亦即 A-Z, a-z
    [ :lower : ]   小寫字母
    [ :upper : ]   大寫字母
    [ :blank : ]   空白字符(空格和制表符)
    [ :digit : ]   十進制數字
    [ :xdigit : ]  十六進制數字
    [ : graph :]   可打印的非空白字符
    [ :print :]   可打印字符
    [ :punct :]   標點符號

 

匹配次數

    * 匹配前面字符任意次,包括0次
    ? 0或1次
    +: 1次或多次
    {n}   匹配前面的字符n次
    {m,n} 匹配前面的字符至少m次,至多n次
    {,n}  匹配前面的字符至多n次
    {n,}  匹配前面的字符至少n次

位置錨定

    ^   行首錨定,用于模式的最左側
 
    $   行尾錨定,用于模式的最右側
 
    \< 或 \b     詞首錨定,用于單詞模式的左側
 
    \> 或 \b     詞尾錨定;用于單詞模式的右側
 
    \<PATTERN\> 匹配整個單詞

分組

    ():分組,后面可以使用1 ,2 ,3...引用前面的分組
    a|b : a或b

優先級

優先級

符號

1

\

2

( )(?: )、(?= )[ ]

3

*、+?、{n}{n,}、{m,n}

4

^、$

5

|

實戰正則表達式入門

(思考的出發點不同,過程也就不盡相同,過程和結果同樣重要

1找出/etc/rc.d/init.d/functions的基名(basename可以直接獲取)。

正則表達式入門

2 找出/etc/rc.d/init.d/functions的目錄名(dirname可以直接獲?。?/span>

正則表達式入門

3 統計last命令中以root用戶登錄的每個主機IP登錄次數。

正則表達式入門

4 顯示ifconfig命令中所有的IPV4地址。

正則表達式入門

5顯示/etc/passwd中以/bin/bash結尾的行。

正則表達式入門

        基于最近的學習整理的資料,尚有諸多不足之處,還望大佬們多多指點!

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

(0)
LinuxWalkerLinuxWalker
上一篇 2017-07-29 11:26
下一篇 2017-07-29 13:33

相關推薦

  • 計算機組成及Linux入門知識

    計算機的基本組成: 存儲器:     實現記憶功能的部件用來存放計算程序及參與運算的各種數據 運算器:     負責數據的算術運算和邏輯運算即數據的加工處理 控制器:     負責對程序規定的控制信息進行分析,控制并協調輸入,輸出操作或內存訪問 輸入設備:    實現計算程序和原始數據的輸入 輸出設備:    實現計算結果輸出 組成的聯系: 圖一 圖二 計算…

    Linux干貨 2016-09-16
  • Linux學習筆記(第三篇)

    N21_Keen_第三周博客 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d " " -f 1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 last…

    Linux干貨 2016-08-15
  • bash腳本編程class2

    bash腳本class2—循環語句的使用      一.三種循環語句以及其具體使用方法   我們知道,在shell腳本編程過程中,為了實現邏輯關系的運算,有三種執行命令的順序:順序執行,選擇執行,循環執行。通過if,case這類語句可以實現條件篩選后執行命令,這次課程中所學的主要知識點為循環語句的三種使用方式:for,…

    Linux干貨 2016-08-19
  • diy自己的linux

    準備一臺liunx的機器,我用的是liunx虛擬機,Centos6.8的鏡像。 單獨加載一塊硬盤,我加載了一塊20G的硬盤,然后用fdisk /dev/sdb進行分區,sdb1用來作為將來系統的/boot分區,所有100M就可以了,sdb2用來作為將來系統的/分區,我給了10G。然后將兩個分區格式化為ext4系統。 mkdir /mnt/boot mkdir…

    Linux干貨 2016-09-13
  • 馬哥網絡教育班第21期+第六周課程練習

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp/ [root@localho…

    Linux干貨 2016-08-02
  • 馬哥教育N22期第五周作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@localhost ~]# egrep "^root|fedora|user1" /etc/passwd root:x:0:0:root:/root:/bin/bash fedora:x:1002:1002::/…

    Linux干貨 2016-09-15
欧美性久久久久