正則表達式之匹配模式

正則表達式(五)

  匹配模式

  匹配模式是指匹配時使用的規則。設定特定的模式,可能會改變對正則表達式的識別,也可能會改變正則表達式中的字符的匹配規定。經常使用匹配模式有:不區分大小寫模式、單行模式、多行模式、註釋模式。python

  不區分大小寫模式

  不區分大小寫是指正則表達式在匹配文本字符串的時候,不區分文本字符串中的大小寫問題。正則表達式

  模式指定方式spa

    1.模式修飾符指定:模式修飾符(?i),例如:正則表達式(?i)the,表示匹配文本字符串中的不區分大小寫the。code

    2.預約義的常量做爲特殊參數傳入指定:python中使用常量re.I或者re.IGNORECASE;JS中使用/regex/i,其中re.I用法例:re.search(patten, string, re.I);JS中regex爲匹配爲本,如1中例子的the。blog

  提取超連接的正則表達式圖片

(?i)<a\s+href\s*=\s*["']?([^"'\s]+)["']?>([^<]+)</a>

  提取標題的正則表達式unicode

(?i)<title>([^>]+)</title>

  提取圖片的正則表達式字符串

(?i)<img\s[^>]*?src=['"]?([^'"]+)[^'"]?[^>]*>

   單行模式

  單行模式下,全部文本只有一行。回到點號匹配任意字符問題,咱們提到過,點號是不能匹配\n換行符的,可是在單行模式下,全部文本一行顯示,相應的\n換行符也只是一個普通的空白符了,不具備換行效果的,所以,點號是能夠匹配的。故,點號在單行模式下,是能夠匹配任意字符的。string

  單行模式影響的是點號的匹配規則:默認模式下,點號能夠匹配\n換行符之外的任意字符;單行模式下,點號能夠匹配任意字符包括\n換行符。it

  模式指定方式

    1.模式修飾符指定:模式修飾符(?s),用法在正則表達式開頭加上(?s)表示此正則表達式啓動單行模式;

    2.預約義的常量做爲特殊參數傳入指定:python中使用常量re.S或者re.DOTALL;JS中不支持單行模式,其中re.S用法例:re.search(patten, string, re.S)。

  多行模式

  多行模式與單行模式沒有必要的聯繫。多行模式影響的是^和$的匹配規則:默認模式下,^和$匹配的是整個字符串的起始位置和結束位置;多行模式下,^和$能夠匹配字符串內部的起始位置和結束位置。

  默認模式下,「人生苦短\n我用python」和多行模式下,「人生苦短\n我用python」。首先明白一點,沒有指定單行模式狀況下,\n換行符都是表示換行的,再也不是普通的空白符。即

「人生苦短
我用python」

  默認模式下,^和$會分別匹配「人」以前位置和「n」以後位置;而多行模式下,^匹配的位置就變成了「人」以前的位置和「我」以前的位置,$匹配的位置變成了「短」以後的位置和「n」以後的位置。「$短」和「^我」都是匹配了字符串內部的起始位置和結束位置。

  模式指定方式

    1.模式修飾符指定:模式修飾符(?m),用法在正則表達式開頭加上(?m)表示此正則表達式啓動多行模式;

    2.預約義的常量做爲特殊參數傳入指定:python中使用常量re.M或者re.MULTILINE;JS中用/regex/m,其中re.M用法例:re.search(patten, string, re.M)。

  註釋模式

  正則表達式通常添加註釋的方法爲(?#comment),能夠在正則表達式的任意位置添加註釋。註釋模式添加註釋是把正則表達式以多行字符串形式表示,在每行正則規則後面添加 #comment,表示註釋。  

  模式指定方式

    1.模式修飾符指定:模式修飾符(?x),用法在正則表達式開頭加上(?x)表示此正則表達式啓動註釋模式;

    2.預約義的常量做爲特殊參數傳入指定:python中使用常量re.X或者re.VERBOSE;JS中用/regex/x,其中re.S用法例:re.search(patten, string, re.X)。

pattern = r'''
(?x)  #enable multiline and extended mode
(
    (\d{4})  #year
    -  #dash
    (\d{2})  #month
    -
    (\d{2})  #day
)
'''

  其餘模式

  re.U或者re.UNICODE,字符組匹配字符能夠是unicode字符,包括中文字符。

  re.A或者re.ASCII,字符組匹配字符是ASCII字符。

相關文章
相關標籤/搜索