1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        建議收藏!使用Python驗(yàn)證常見的50個(gè)正則表達(dá)式

        共 7721字,需瀏覽 16分鐘

         ·

        2021-01-25 16:41

        ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

        后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


        什么是正則表達(dá)式?

        正則表達(dá)式(Regular Expression)通常被用來檢索、替換那些符合某個(gè)模式(規(guī)則)的文本。

        此處的Regular即是規(guī)則、規(guī)律的意思,Regular Expression即“描述某種規(guī)則的表達(dá)式”之意。

        本文收集了一些常見的正則表達(dá)式用法,方便大家查詢?nèi)∮?,并在最后附了詳?xì)的正則表達(dá)式語法手冊(cè)。

        案例包括:「郵箱、身份證號(hào)、手機(jī)號(hào)碼、固定電話、域名、IP地址、日期、郵編、密碼、中文字符、數(shù)字、字符串」

        Python如何支持正則?

        我用的是python來實(shí)現(xiàn)正則,并使用Jupyter Notebook編寫代碼。

        Python通過re模塊支持正則表達(dá)式,re 模塊使 Python 語言擁有全部的正則表達(dá)式功能。

        這里要注意兩個(gè)函數(shù)的使用:

        re.compile用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式( Pattern )對(duì)象;

        .findall用于在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果沒有找到匹配的,則返回空列表。

        #?導(dǎo)入re模塊
        import?re

        1.郵箱

        包含大小寫字母,下劃線,阿拉伯?dāng)?shù)字,點(diǎn)號(hào),中劃線

        表達(dá)式:

        [a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)

        案例:

        pattern?=?re.compile(r"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)")

        strs?=?'我的私人郵箱是[email protected],公司郵箱是[email protected],麻煩登記一下?'
        result?=?pattern.findall(strs)

        print(result)
        ['[email protected]', '[email protected]']

        2. 身份證號(hào)

        xxxxxx yyyy MM dd 375 0 ? ? 十八位

        • 地區(qū):[1-9]\d{5}
        • 年的前兩位:(18|19|([23]\d)) ? ? ? 1800-2399
        • 年的后兩位:\d{2}
        • 月份:((0[1-9])|(10|11|12))
        • 天數(shù):(([0-2][1-9])|10|20|30|31) ? ? ? ? ?閏年不能禁止29+
        • 三位順序碼:\d{3}
        • 兩位順序碼:\d{2}
        • 校驗(yàn)碼:[0-9Xx]

        表達(dá)式:

        [1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]

        案例:

        pattern?=?re.compile(r"[1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]")

        strs?=?'小明的身份證號(hào)碼是342623198910235163,手機(jī)號(hào)是13987692110'
        result?=?pattern.findall(strs)

        print(result)
        ['342623198910235163']

        3. 國內(nèi)手機(jī)號(hào)碼

        手機(jī)號(hào)都為11位,且以1開頭,第二位一般為3、5、6、7、8、9 ,剩下八位任意數(shù)字
        例如:13987692110、15610098778

        表達(dá)式:

        1(3|4|5|6|7|8|9)\d{9}

        案例:

        pattern?=?re.compile(r"1[356789]\d{9}")

        strs?=?'小明的手機(jī)號(hào)是13987692110,你明天打給他'
        result?=?pattern.findall(strs)

        print(result)
        ['13987692110']

        4. 國內(nèi)固定電話

        區(qū)號(hào)3~4位,號(hào)碼7~8位

        例如:0511-1234567、021-87654321

        表達(dá)式:

        \d{3}-\d{8}|\d{4}-\d{7}

        案例:

        pattern?=?re.compile(r"\d{3}-\d{8}|\d{4}-\d{7}")

        strs?=?'0511-1234567是小明家的電話,他的辦公室電話是021-87654321'
        result?=?pattern.findall(strs)

        print(result)
        ['0511-1234567', '021-87654321']

        5. 域名

        包含http:\\或https:\\

        表達(dá)式:

        (?:(?:http:\/\/)|(?:https:\/\/))?(?:[\w](?:[\w\-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:\/)

        案例:

        pattern?=?re.compile(r"(?:(?:http:\/\/)|(?:https:\/\/))?(?:[\w](?:[\w\-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:\/)")

        strs?=?'Python官網(wǎng)的網(wǎng)址是https://www.python.org/'
        result?=?pattern.findall(strs)

        print(result)
        ['https://www.python.org/']

        6. IP地址

        IP地址的長度為32位(共有2^32個(gè)IP地址),分為4段,每段8位,用十進(jìn)制數(shù)字表示
        每段數(shù)字范圍為0~255,段與段之間用句點(diǎn)隔開 

        表達(dá)式:

        ((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

        案例:

        pattern?=?re.compile(r"((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))")

        strs?=?'''請(qǐng)輸入合法IP地址,非法IP地址和其他字符將被過濾!
        增、刪、改IP地址后,請(qǐng)保存、關(guān)閉記事本!
        192.168.8.84
        192.168.8.85
        192.168.8.86
        0.0.0.1
        256.1.1.1
        192.256.256.256
        192.255.255.255
        aa.bb.cc.dd'''


        result?=?pattern.findall(strs)

        print(result)
        ['192.168.8.84', '192.168.8.85', '192.168.8.86', '0.0.0.1', '56.1.1.1', '192.255.255.255']

        7. 日期

        常見日期格式:yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd

        表達(dá)式:

        \d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2}

        案例:

        pattern?=?re.compile(r"\d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2}")

        strs?=?'今天是2020/12/20,去年的今天是2019.12.20,明年的今天是2021-12-20'
        result?=?pattern.findall(strs)

        print(result)

        ['2020/12/20', '2019.12.20', '2021-12-20']

        8. 國內(nèi)郵政編碼

        我國的郵政編碼采用四級(jí)六位數(shù)編碼結(jié)構(gòu)
        前兩位數(shù)字表示?。ㄖ陛犑小⒆灾螀^(qū))
        第三位數(shù)字表示郵區(qū);第四位數(shù)字表示縣(市)
        最后兩位數(shù)字表示投遞局(所)

        表達(dá)式:

        [1-9]\d{5}(?!\d)

        案例:

        pattern?=?re.compile(r"[1-9]\d{5}(?!\d)")

        strs?=?'上海靜安區(qū)郵編是200040'
        result?=?pattern.findall(strs)

        print(result)
        ['200040']

        9. 密碼

        密碼(以字母開頭,長度在6~18之間,只能包含字母、數(shù)字和下劃線)

        表達(dá)式:

        [a-zA-Z]\w{5,17}

        強(qiáng)密碼(以字母開頭,必須包含大小寫字母和數(shù)字的組合,不能使用特殊字符,長度在8-10之間)

        表達(dá)式:

        [a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}

        pattern?=?re.compile(r"[a-zA-Z]\w{5,17}")

        strs?=?'密碼:q123456_abc'
        result?=?pattern.findall(strs)

        print(result)
        ['q123456_abc']
        pattern?=?re.compile(r"[a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}")

        strs?=?'強(qiáng)密碼:q123456ABc,弱密碼:q123456abc'
        result?=?pattern.findall(strs)

        print(result)
        ['q123456ABc,']

        10. 中文字符

        表達(dá)式:

        [\u4e00-\u9fa5]

        案例:

        pattern?=?re.compile(r"[\u4e00-\u9fa5]")

        strs?=?'apple:蘋果'
        result?=?pattern.findall(strs)

        print(result)
        ['蘋', '果']

        11. 數(shù)字

        • 驗(yàn)證數(shù)字:^[0-9]*$
        • 驗(yàn)證n位的數(shù)字:^\d{n}$
        • 驗(yàn)證至少n位數(shù)字:^\d{n,}$
        • 驗(yàn)證m-n位的數(shù)字:^\d{m,n}$
        • 驗(yàn)證零和非零開頭的數(shù)字:^(0|[1-9][0-9]*)$
        • 驗(yàn)證有兩位小數(shù)的正實(shí)數(shù):^[0-9]+(.[0-9]{2})?$
        • 驗(yàn)證有1-3位小數(shù)的正實(shí)數(shù):^[0-9]+(.[0-9]{1,3})?$
        • 驗(yàn)證非零的正整數(shù):^\+?[1-9][0-9]*$
        • 驗(yàn)證非零的負(fù)整數(shù):^\-[1-9][0-9]*$
        • 驗(yàn)證非負(fù)整數(shù)(正整數(shù) + 0) ^\d+$
        • 驗(yàn)證非正整數(shù)(負(fù)整數(shù) + 0) ^((-\d+)|(0+))$
        • 整數(shù):^-?\d+$
        • 非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0):^\d+(\.\d+)?$
        • 正浮點(diǎn)數(shù) ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
        • 非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
        • 負(fù)浮點(diǎn)數(shù) ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
        • 浮點(diǎn)數(shù) ^(-?\d+)(\.\d+)?$

        12. 字符串

        • 英文和數(shù)字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
        • 長度為3-20的所有字符:^.{3,20}$
        • 由26個(gè)英文字母組成的字符串:^[A-Za-z]+$
        • 由26個(gè)大寫英文字母組成的字符串:^[A-Z]+$
        • 由26個(gè)小寫英文字母組成的字符串:^[a-z]+$
        • 由數(shù)字和26個(gè)英文字母組成的字符串:^[A-Za-z0-9]+$
        • 由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$
        • 中文、英文、數(shù)字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
        • 中文、英文、數(shù)字但不包括下劃線等符號(hào):^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
        • 可以輸入含有^%&',;=?$\”等字符:`[^%&',;=?$\x22]+`
        • 禁止輸入含有~的字符:[^~\x22]+

        附:正則表達(dá)式語法詳解

        字符描述
        \將下一個(gè)字符標(biāo)記為一個(gè)特殊字符(File Format Escape,清單見本表)、或一個(gè)原義字符(Identity Escape,有^$()*+?.[{|共計(jì)12個(gè))、或一個(gè)向后引用(backreferences)、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,“n”匹配字符“n”?!?code>\n”匹配一個(gè)換行符。序列“\\”匹配“\”而“\(”則匹配“(”。
        ^匹配輸入字符串的開始位置
        $匹配輸入字符串的結(jié)束位置
        *匹配前面的子表達(dá)式零次或多次。例如,zo*能匹配“z”、“zo”以及“zoo”。*等價(jià)于{0,}。
        +匹配前面的子表達(dá)式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價(jià)于{1,}。
        ?匹配前面的子表達(dá)式零次或一次。例如,“do(es)?”可以匹配“does”中的“do”和“does”。?等價(jià)于{0,1}。
        {n}n是一個(gè)非負(fù)整數(shù)。匹配確定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的兩個(gè)o。
        {n,}n是一個(gè)非負(fù)整數(shù)。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o?!?code>o{1,}”等價(jià)于“o+”。“o{0,}”則等價(jià)于“o*”。
        {n,m}m和n均為非負(fù)整數(shù),其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個(gè)o?!?code>o{0,1}”等價(jià)于“o?”。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。
        ?非貪心量化(Non-greedy quantifiers):當(dāng)該字符緊跟在任何一個(gè)其他重復(fù)修飾符(*,+,?,{n},{n,},{n,m})后面時(shí),匹配模式是「非」貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對(duì)于字符串“oooo”,“o+?”將匹配單個(gè)“o”,而“o+”將匹配所有“o”。
        .匹配除“\r”“\n”之外的任何單個(gè)字符。要匹配包括“\r”“\n”在內(nèi)的任何字符,請(qǐng)使用像“(.\|\r\|\n)”的模式。
        (pattern)匹配pattern并獲取這一匹配的子字符串。該子字符串用于向后引用。所獲取的匹配可以從產(chǎn)生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號(hào)字符,請(qǐng)使用“\(”或“\)”??蓭?shù)量后綴。
        (?:pattern)匹配pattern但不獲取匹配的子字符串(shy groups),也就是說這是一個(gè)非獲取匹配,不存儲(chǔ)匹配的子字符串用于向后引用。這在使用或字符“(\|)”來組合一個(gè)模式的各個(gè)部分是很有用。例如“industr(?:y\|ies)”就是一個(gè)比“industry\|industries”更簡略的表達(dá)式。
        (?=pattern)正向肯定預(yù)查(look ahead positive assert),在任何匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,“Windows(?=95\|98\|NT\|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始。
        (?!pattern)正向否定預(yù)查(negative assert),在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如“Windows(?!95\|98\|NT\|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始
        (?<=pattern)反向(look behind)肯定預(yù)查,與正向肯定預(yù)查類似,只是方向相反。例如,“(?<=95\|98\|NT\|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
        (?反向否定預(yù)查,與正向否定預(yù)查類似,只是方向相反。例如“(?”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
        x\|y沒有包圍在()里,其范圍是整個(gè)正則表達(dá)式。例如,“z\|food”能匹配“z”或“food”?!?code>(?:z\|f)ood”則匹配“zood”或“food”。
        [xyz]字符集合(character class)。匹配所包含的任意一個(gè)字符。例如,“[abc]”可以匹配“plain”中的“a”。特殊字符僅有反斜線\保持特殊含義,用于轉(zhuǎn)義字符。其它特殊字符如星號(hào)、加號(hào)、各種括號(hào)等均作為普通字符。脫字符^如果出現(xiàn)在首位則表示負(fù)值字符集合;如果出現(xiàn)在字符串中間就僅作為普通字符。連字符 - 如果出現(xiàn)在字符串中間表示字符范圍描述;如果如果出現(xiàn)在首位(或末尾)則僅作為普通字符。右方括號(hào)應(yīng)轉(zhuǎn)義出現(xiàn),也可以作為首位字符出現(xiàn)。
        [^xyz]排除型字符集合(negated character classes)。匹配未列出的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
        [a-z]字符范圍。匹配指定范圍內(nèi)的任意字符。例如,“[a-z]”可以匹配“a”到“z”范圍內(nèi)的任意小寫字母字符。
        [^a-z]排除型的字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范圍內(nèi)的任意字符。
        [:name:]增加命名字符類(named character class)中的字符到表達(dá)式。只能用于「方括號(hào)表達(dá)式」。
        [=elt=]增加當(dāng)前l(fā)ocale下排序(collate)等價(jià)于字符“elt”的元素。例如,[=a=]可能會(huì)增加?、á、à、?、?、?、?、?、a、?、?、?、?、ǎ、?、?、?、?、?、?、?、?、ā、?、?、?、?、?、?、?、?、?、?、ɑ 。只能用于方括號(hào)表達(dá)式。
        [.elt.]增加排序元素elt到表達(dá)式中。這是因?yàn)槟承┡判蛟赜啥鄠€(gè)字符組成。例如,29個(gè)字母表的西班牙語, "CH"作為單個(gè)字母排在字母C之后,因此會(huì)產(chǎn)生如此排序“cinco, credo, chispa”。只能用于方括號(hào)表達(dá)式。
        \b匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
        \B匹配非單詞邊界?!?code>er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
        \cx匹配由x指明的控制字符。x的值必須為A-Za-z之一。否則,將c視為一個(gè)原義的“c”字符??刂谱址闹档扔趚的值最低5比特(即對(duì)3210進(jìn)制的余數(shù))。例如,\cM匹配一個(gè)Control-M或回車符。\ca等效于\u0001, \cb等效于\u0002, 等等…
        \d匹配一個(gè)數(shù)字字符。等價(jià)于[0-9]。注意Unicode正則表達(dá)式會(huì)匹配全角數(shù)字字符。
        \D匹配一個(gè)非數(shù)字字符。等價(jià)于[^0-9]。
        \f匹配一個(gè)換頁符。等價(jià)于\x0c和\cL。
        \n匹配一個(gè)換行符。等價(jià)于\x0a和\cJ。
        \r匹配一個(gè)回車符。等價(jià)于\x0d和\cM。
        \s匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于[ \f\n\r\t\v]。注意Unicode正則表達(dá)式會(huì)匹配全角空格符。
        \S匹配任何非空白字符。等價(jià)于[^ \f\n\r\t\v]。
        \t匹配一個(gè)制表符。等價(jià)于\x09和\cI。
        \v匹配一個(gè)垂直制表符。等價(jià)于\x0b和\cK。
        \w匹配包括下劃線的任何單詞字符。等價(jià)于“[A-Za-z0-9_]”。注意Unicode正則表達(dá)式會(huì)匹配中文字符。
        \W匹配任何非單詞字符。等價(jià)于“[^A-Za-z0-9_]”。
        \xnn十六進(jìn)制轉(zhuǎn)義字符序列。匹配兩個(gè)十六進(jìn)制數(shù)字nn表示的字符。例如,“\x41”匹配“A”?!?code>\x041”則等價(jià)于“\x04&1”。正則表達(dá)式中可以使用ASCII編碼。.
        \num向后引用(back-reference)一個(gè)子字符串(substring),該子字符串與正則表達(dá)式的第num個(gè)用括號(hào)圍起來的捕捉群(capture group)子表達(dá)式(subexpression)匹配。其中num是從1開始的十進(jìn)制正整數(shù),其上限可能是9、31、99,甚至無限。例如:“(.)\1”匹配兩個(gè)連續(xù)的相同字符。
        \n標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果\n之前至少n個(gè)獲取的子表達(dá)式,則n為向后引用。否則,如果n為八進(jìn)制數(shù)字(0-7),則n為一個(gè)八進(jìn)制轉(zhuǎn)義值。
        \nm3位八進(jìn)制數(shù)字,標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用。如果\nm之前至少有nm個(gè)獲得子表達(dá)式,則nm為向后引用。如果\nm之前至少有n個(gè)獲取,則n為一個(gè)后跟文字m的向后引用。如果前面的條件都不滿足,若n和m均為八進(jìn)制數(shù)字(0-7),則\nm將匹配八進(jìn)制轉(zhuǎn)義值nm。
        \nml如果n為八進(jìn)制數(shù)字(0-3),且m和l均為八進(jìn)制數(shù)字(0-7),則匹配八進(jìn)制轉(zhuǎn)義值nml。
        \unUnicode轉(zhuǎn)義字符序列。其中n是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的Unicode字符。例如,\u00A9匹配著作權(quán)符號(hào)(?)。

        優(yōu)先權(quán)

        優(yōu)先權(quán)符號(hào)
        最高\
        ()、(?:)、(?=)、[]
        *、+、?、{n}、{n,}{n,m}
        ^、$、中介字符
        次最低串接,即相鄰字符連接在一起
        最低\|

        見面禮


        碼加我微信備注「三劍客」送你上圖三本Python入門電子書?


        推薦閱讀


        1. 費(fèi)解!為什么那么多人用“ji32k7au4a83”作密碼?

        2. 火了!開源的Python搶票神器,過年回家就看這一波了!

        3. 為什么 Django 框架比Flask框架更流行?


        點(diǎn)分享
        點(diǎn)收藏
        點(diǎn)點(diǎn)贊
        點(diǎn)在看

        瀏覽 30
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            男人天堂视频在线 | a级一级 国产操逼视频免费观看 | 午夜性直播在线观看 | 国产精品国产三级国产专区55 | 色天堂污| 国产欧美岛国 | 99网页视频 | 亚洲一区国产 | 黄色网页大全 | 成人性爱视频免费在线观看 |