一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

php正則表達式使用的詳細介紹_PHP教程

編輯Tag賺U幣

推薦:PHP字符串的編碼問題的詳細介紹
本篇文章介紹了,在PHP中字符串的編碼問題的詳細分析,需要的朋友參考下

前言

正則表達式是煩瑣的,但是強大的,學會之后的應用會讓你除了提高效率外,會給你帶來絕對的成就感。只要認真去閱讀這些資料,加上應用的時候進行一定的參考,掌握正則表達式不是問題。


1. 引子

  目前,正則表達式已經在很多軟件中得到廣泛的應用,包括*nix(Linux, Unix等),HP等操作系統,PHP,C#,Java等開發環境,以及很多的應用軟件中,都可以看到正則表達式的影子。

  正則表達式的使用,可以通過簡單的辦法來實現強大的功能。為了簡單有效而又不失強大,造成了正則表達式代碼的難度較大,學習起來也不是很容易,所以需要付出一些努力才行,入門之后參照一定的參考,使用起來還是比較簡單有效的。

例子: ^.+@.+\\..+$

  這樣的代碼曾經多次把我自己給嚇退過。可能很多人也是被這樣的代碼給嚇跑的吧。繼續閱讀本文將讓你也可以自由應用這樣的代碼。

  注意:這里的第7部分跟前面的內容看起來似乎有些重復,目的是把前面表格里的部分重新描述了一次,目的是讓這些內容更容易理解。

2. 正則表達歷史
  正則表達式的“祖先”可以一直上溯至對人類神經系統如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經生理學家研究出一種數學方式來描述這些神經網絡。

  1956 年, 一位叫 Stephen Kleene 的數學家在 McCulloch 和 Pitts 早期工作的基礎上,發表了一篇標題為“神經網事件的表示法”的論文,引入了正則表達式的概念。正則表達式就是用來描述他稱為“正則集的代數”的表達式,因此采用“正則表達式”這個術語。

  隨后,發現可以將這一工作應用于使用 Ken Thompson 的計算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要發明人。正則表達式的第一個實用應用程序就是 Unix 中的 qed 編輯器。

  如他們所說,剩下的就是眾所周知的歷史了。從那時起直至現在正則表達式都是基于文本的編輯器和搜索工具中的一個重要部分。


3. 正則表達式定義

  正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。

列目錄時, dir *.txt或ls *.txt中的*.txt就不是一個正則表達式,因為這里*與正則式的*的含義是不同的。

  正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。
3.1 字符

1、普通字符:

由所有那些未顯式指定為元字符的打印和非打印字符組成。這包括所有的大寫和小寫字母字符,所有數字,所有標點符號以及一些符號。

2、非打印字符:
字符 含義
\cx 匹配由x指明的控制字符。例如, \cM 匹配一個 Control-M 或回車符。x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字符。
\f 匹配一個換頁符。等價于 \x0c 和 \cL。
\n 匹配一個換行符。等價于 \x0a 和 \cJ。
\r 匹配一個回車符。等價于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。
\t 匹配一個制表符。等價于 \x09 和 \cI。
\v 匹配一個垂直制表符。等價于 \x0b 和 \cK。


3、元字符(特殊字符):

   所謂元字符(特殊字符),就是一些有特殊含義的字符,如上面說的"*.txt"中的*,簡單的說就是表示任何字符串的意思。如果要查找文件名中有*的文件,則需要對*進行轉義,即在其前加一個\。ls \*.txt。正則表達式有以下特殊字符。

要在正則表達式模式中包含元字符以使其不具有特殊含義,您必須使用反斜杠 (\) 轉義字符。例如,下面的正則表達式與順序依次為字母 A、字母 B、星號和字母 C 的模式匹配:

/AB\*C/;
元字符 說明
$ 匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,請使用 \$。
( ) 標記一個子表達式的開始和結束位置。子表達式可以獲取供以后使用。要匹配這些字符,請使用 \( 和 \)。
* 匹配前面的子表達式零次或多次。要匹配 * 字符,請使用 \*。
+ 匹配前面的子表達式一次或多次。要匹配 + 字符,請使用 \+。
. 匹配除換行符 \n之外的任何單字符。要匹配 .,請使用 \。
[ 標記一個中括號表達式的開始。要匹配 [,請使用 \[。
? 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字符,請使用 \?。
\ 將下一個字符標記為或特殊字符、或原義字符、或向后引用、或八進制轉義符。例如, 'n' 匹配字符 'n'。'\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("。
^ 匹配輸入字符串的開始位置,除非在方括號表達式中使用,此時它表示不接受該字符集合。要匹配 ^ 字符本身,請使用 \^。
{ 標記限定符表達式的開始。要匹配 {,請使用 \{。
| 指明兩項之間的一個選擇。要匹配 |,請使用 \|。

  構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字符與操作符將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。

4、限定符:

限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。有*或+或?或{n}或{n,}或{n,m}共6種。
*、+和?限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的后面加上一個?就可以實現非貪婪或最小匹配。
   正則表達式的限定符有:
 
字符 描述
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價于{0,}。
+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價于 {1,}。
? 匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價于 {0,1}。
{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
{n,} n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數之間不能有空格!

5、定界符:邊界

用來描述字符串或單詞的邊界,^和$分別指字符串的開始與結束,\b描述單詞的前或后邊界,\B表示非單詞邊界。不能對定位符使用限定符。
3.2 字符類[ ]

可以使用字符類指定字符列表以匹配正則表達式中的一個位置。使用方括號([ 和 ])定義字符類。例如,下面的正則表達式定義了匹配 bag、beg、big、bog 或 bug 的字符類:
/b[aeiou]g/
1、字符類中的轉義序列:
通常在正則表達式中具有特殊含義的大多數元字符和元序列在字符類中“不具有”那些特殊含義。例如,在正則表達式中星號用于表示重復,但是出現在字符類中時則不具有此含義。下列字符類匹配星號本身以及列出的任何其它字符:
/[abc*123]/
但是,下表中列出的三個字符功能與元字符相同,在字符類中具有特殊含義:

] :定義字符類的結尾。
- :定義字符范圍

\ :定義元序列并撤銷元字符的特殊含義。
對于要識別為字面字符(無特殊元字符含義)的任何字符,必須在該字符前面加反斜杠轉義字符。 例如,下面的正則表達式包含匹配四個符號($、\、] 或 -)中任意一個符號的字符類。
/[$\\\]\-]/

2、字符類中字符的范圍:
使用連字符指定字符的范圍,例如 A-Z、a-z 或 0-9。這些字符必須在字符類中構成有效的范圍。例如,下面的字符類匹配 a-z 范圍內的任何一個字符或任何數字:
/[a-z0-9]/
您還可以使用 \xnn ASCII 字符代碼通過 ASCII 值指定范圍。例如,下面的字符類匹配擴展 ASCII 字符集中的任意字符 (如 é 和 ê):
/[\x80-\x9A]/

3、反轉的字符類:
如果在字符類的開頭使用尖號 (^) 字符,則將反轉該集合的意義,即未列出的任何字符都認為匹配。下面的字符類匹配除小寫字母 (a-z) 或數字以外的任何字符:
/[^a-z0-9]/
必須在字符類的“開頭”鍵入尖號 (^) 字符以表示反轉。否則,您只是將尖號字符添加到字符類的字符中。例如,下面的字符類匹配許多符號字符中的任意一個,其中包括尖號:
/[!.,#+*%$&^]/
3.3 分組和選擇

   用圓括號將所有選擇項括起來,相鄰的選擇項之間用|分隔。但用圓括號會有一個副作用,是相關的匹配會被緩存,此時可用?:放在第一個選項前來消除這種副作用。
   其中?:是非捕獲元之一,還有兩個非捕獲元是?=和?!,這兩個還有更多的含義,前者為正向預查,在任何開始匹配圓括號內的正則表達式模式的位置來匹配搜索字符串,后者為負向預查,在任何開始不匹配該正則表達式模式的位置來匹配搜索字符串。

例如: /(very)+/ 可以匹配very googd或者very very good

1、后向引用(逆向引用):

   如果在模式中定義標準括號組,則之后可以在正則表達式中引用它。這稱為“逆向引用”,并且此類型的組稱為 “捕獲組”。

對一個正則表達式模式或部分模式兩邊添加圓括號將導致相關匹配存儲到一個臨時緩沖區中,所捕獲的每個子匹配都按照在正則表達式模式中從左至右所遇到的內容存儲。存儲子匹配的緩沖區編號從 1 開始,連續編號直至最大 99 個子表達式。每個緩沖區都可以使用 '\n' 訪問,其中 n 為一個標識特定緩沖區的一位或兩位十進制數。
   例如,在下面的正則表達式中,序列 \1 匹配在捕獲括號組中匹配的任意子字符串:
/(\d+)-by-\1/; // 匹配字符串:48-by-48
可以通過鍵入 \1, \2,..., \99 在正則表達式中指定最多 99 個此類逆向引用。

可以使用非捕獲元字符 '?:', '?=', or '?!' 來忽略對相關匹配的保存。

2、使用非捕獲組和向前查找組:
非捕獲組是只用于分組的組,它不會被“收集” ,也不會匹配有限的逆向引用?梢允褂 (?:和 ?!) 來定義非捕獲組,如下所示:
/(?:com|org|net);
例如,注意在捕獲組和非捕獲組中加入 (com|org) 的區別(使用php來演示):

捕獲組) :

復制代碼 代碼如下:www.zhaotila.cn

$pattern = '/(\w+)@(\w+).(com|org)/';
$str = "bob@example.com";
preg_match($pattern, $str, $match);
print_r($match);

Array
(
[0] => bob@example.com
[1] => bob
[2] => example
[3] => com
)

非捕獲組) :

復制代碼 代碼如下:www.zhaotila.cn

$pattern = '/(\w+)@(\w+).(?:com|org)/';
$str = "bob@example.com";
preg_match($pattern, $str, $match);
print_r($match);

Array
(
[0] => bob@example.com
[1] => bob
[2] => example
)
一類特殊的非捕獲組是 “向前查找組” ,它包括兩種類型: “正向前查找組”和 “負向前查找組” 。 使用 (?= 和?!) 定義正向前查找組,它指定組中的子模式位置必須匹配。但是,匹配正向前查找組的字符串部分可能匹配正則表達式中的剩余模式。例如,由于 (?=e) 在下列代碼中是正向前查找組,它匹配的字符 e 可以被正則表達式的后續部分匹配,在本例中為捕獲組 \w*):
復制代碼 代碼如下:www.zhaotila.cn

$pattern = '/sh(?=e)(\w*)/i';
$str = "Shelly sells seashells by the seashore";
preg_match($pattern, $str, $match);
print_r($match);

Array
(
[0] => Shelly
[1] => elly
)

使用 (?! 和) 定義負向前查找組,它指定該組中的子模式位置必須不匹配。例如:

模式:$pattern = '/sh(?!e)(\w*)/i';
Array
(
[0] => shore
[1] => ore
)
3.2 模式修正標志符

此外還有:

U: 表示PCRE_UNGREEDY,表示非貪婪,相當于perl/python語言的.*?,在匹配過程中,對于.*正則,一有匹配立即執行,而不是等.*消費了所有字符再一一回退。

PHP正則表達式模式后面通常帶有 /i, /is, /s, /isU等參數,那么這都是些什么東西呢?下面我們一起來看看:

模式修正符 -- 解說正則表達式模式中使用的修正符
說明
  下面列出了當前在 PCRE 中可能使用的修正符。括號中是這些修正符的內部 PCRE 名。修正符中的空格和換行被忽略,其它字符會導致錯誤。

i (PCRE_CASELESS)
  如果設定此修正符,模式中的字符將同時匹配大小寫字母。

m(PCRE_MULTILINE)
  默認情況下,PCRE 將目標字符串作為單一的一“行”字符所組成的(甚至其中包含有換行符也是如此)!靶衅鹗肌痹址╚)僅僅匹配字符串的起始,“行結束”元字符($)僅僅匹配字符串的結束,或者最后一個字符是換行符時其前面(除非設定了 D 修正符)。這和 Perl 是一樣的。

  當設定了此修正符,“行起始”和“行結束”除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符的之后和之前。這和 Perl 的 /m 修正符是等效的。如果目標字符串中沒有“\n”字符或者模式中沒有 ^ 或 $,則設定此修正符沒有任何效果。

s(PCRE_DOTALL)
  如果設定了此修正符,模式中的圓點元字符(.)匹配所有的字符,包括換行符。沒有此設定的話,則不包括換行符。這和 Perl 的 /s 修正符是等效的。排除字符類例如 [^a] 總是匹配換行符的,無論是否設定了此修正符。

x(PCRE_EXTENDED)
  如果設定了此修正符,模式中的空白字符除了被轉義的或在字符類中的以外完全被忽略,在未轉義的字符類之外的 # 以及下一個換行符之間的所有字符,包括兩頭,也都被忽略。這和 Perl 的 /x 修正符是等效的,使得可以在復雜的模式中加入注釋。然而注意,這僅適用于數據字符。空白字符可能永遠不會出現于模式中的特殊字符序列,例如引入條件子模式的序列 (?( 中間。

e
  如果設定了此修正符,preg_replace() 在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,并用其結果來替換所搜索的字符串。

  只有 preg_replace() 使用此修正符,其它 PCRE 函數將忽略之。

  注: 本修正符在 PHP3 中不可用。

A(PCRE_ANCHORED)
  如果設定了此修正符,模式被強制為“anchored”,即強制僅從目標字符串的開頭開始匹配。此效果也可以通過適當的模式本身來實現(在 Perl 中實現的唯一方法)。

D(PCRE_DOLLAR_ENDONLY)
  如果設定了此修正符,模式中的美元元字符僅匹配目標字符串的結尾。沒有此選項時,如果  最后一個字符是換行符的話,美元符號也會匹配此字符之前(但不會匹配任何其它換行符之前)。如果設定了 m 修正符則忽略此選項。Perl 中沒有與其等價的修正符。

S
  當一個模式將被使用若干次時,為加速匹配起見值得先對其進行分析。如果設定了此修正符則會進行額外的分析。目前,分析一個模式僅對沒有單一固定起始字符的 non-anchored 模式有用。

U(PCRE_UNGREEDY)
  本修正符反轉了匹配數量的值使其不是默認的重復,而變成在后面跟上“?”才變得重復。這和 Perl 不兼容。也可以通過在模式之中設定 (?U) 修正符或者在數量符之后跟一個問號(如 .*?)來啟用此選項。

例如:

復制代碼 代碼如下:www.zhaotila.cn

<?php
$str = 'src="http://www.test.cn/1.mp3" type="application/x-mplayer2"test,3333';
echo preg_replace('/src="(.*)"/', '--', $str);
echo '<br>';
echo preg_replace('/src="(.*)"/U', '--', $str);
echo '<br>';
echo preg_replace('/src="(.*?)"/', '--', $str);//等效preg_replace('|src="(.*)"|U', '--', $str);

結果:

--test,3333

-- type="application/x-mplayer2"test,3333

-- type="application/x-mplayer2"test,3333

從這里我們就可以看出,第一個執行結果一直匹配到最后一個滿足條件的字符,專業一點就叫貪婪匹配,

第二個執行結果只匹配第一個滿足條件的字符,叫 非貪婪匹配。

X(PCRE_EXTRA)
  此修正符啟用了一個 PCRE 中與 Perl 不兼容的額外功能。模式中的任何反斜線后面跟上一個沒有特殊意義的字母導致一個錯誤,從而保留此組合以備將來擴充。默認情況下,和 Perl 一樣,一個反斜線后面跟一個沒有特殊意義的字母被當成該字母本身。當前沒有其它特性受此修正符控制。

u(PCRE_UTF8)
  此修正符啟用了一個 PCRE 中與 Perl 不兼容的額外功能。模式字符串被當成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起開始檢查模式的 UTF-8 合法性。


4. 各種操作符的運算優先級

   相同優先級的從左到右進行運算,不同優先級的運算先高后低。各種操作符的優先級從高到低如下:
 
操作符 描述
\ 轉義符
(), (?:), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和順序
| “或”操作

5. 全部符號解釋
字符 描述
\ 將下一個字符標記為一個特殊字符、或一個原義字符、或一個 向后引用、或一個八進制轉義符。例如,'n' 匹配字符 "n"。'\n' 匹配一個換行符。序列 '\\' 匹配 "\" 而 "\(" 則匹配 "("。
^ 匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配輸入字符串的結束位置。如果設置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價于{0,}。
+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價于 {1,}。
? 匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價于 {0,1}。
{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
{n,} n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
{n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數之間不能有空格。
? 當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。
. 匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。
(pattern) 匹配 pattern 并獲取這一匹配。所獲取的匹配可以從產生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 $0…$9 屬性。要匹配圓括號字符,請使用 '\(' 或 '\)'。
(?:pattern) 匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用 "或" 字符 (|) 來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的表達式。
(?=pattern) 正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。
(?!pattern) 負向預查,在任何不匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] 負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 字符范圍。匹配指定范圍內的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內的任意小寫字母字符。
[^a-z] 負值字符范圍。匹配任何不在指定范圍內的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字符。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx 匹配由 x 指明的控制字符。例如, \cM 匹配一個 Control-M 或回車符。x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字符。
\d 匹配一個數字字符。等價于 [0-9]。
\D 匹配一個非數字字符。等價于 [^0-9]。
\f 匹配一個換頁符。等價于 \x0c 和 \cL。
\n 匹配一個換行符。等價于 \x0a 和 \cJ。
\r 匹配一個回車符。等價于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等價于 [^ \f\n\r\t\v]。
\t 匹配一個制表符。等價于 \x09 和 \cI。
\v 匹配一個垂直制表符。等價于 \x0b 和 \cK。
\w 匹配包括下劃線的任何單詞字符。等價于'[A-Za-z0-9_]'。
\W 匹配任何非單詞字符。等價于 '[^A-Za-z0-9_]'。
\xn 匹配 n,其中 n 為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。例如,'\x41' 匹配 "A"。'\x041' 則等價于 '\x04' & "1"。正則表達式中可以使用 ASCII 編碼。.
\num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。例如,'(.)\1' 匹配兩個連續的相同字符。
\n 標識一個八進制轉義值或一個向后引用。如果 \n 之前至少 n 個獲取的子表達式,則 n 為向后引用。否則,如果 n 為八進制數字 (0-7),則 n 為一個八進制轉義值。
\nm 標識一個八進制轉義值或一個向后引用。如果 \nm 之前至少有 nm 個獲得子表達式,則 nm 為向后引用。如果 \nm 之前至少有 n 個獲取,則 n 為一個后跟文字 m 的向后引用。如果前面的條件都不滿足,若 n 和 m 均為八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm。
\nml 如果 n 為八進制數字 (0-3),且 m 和 l 均為八進制數字 (0-7),則匹配八進制轉義值 nml。
\un 匹配 n,其中 n 是一個用四個十六進制數字表示的 Unicode 字符。例如, \u00A9 匹配版權符號 (?)。

6. 部分例子
正則表達式 說明
/\b([a-z]+) \1\b/gi 一個單詞連續出現的位置
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ 將一個URL解析為協議、域、端口及相對路徑
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章節的位置
/[-a-z]/ A至z共26個字母再加一個-號。
/ter\b/ 可匹配chapter,而不能terminal
/\Bapt/ 可匹配chapter,而不能aptitude
/Windows(?=95 |98 |NT )/ 可匹配Windows95或Windows98或WindowsNT,當找到一個匹配后,從Windows后面開始進行下一次的檢索匹配。

7. 正則表達式匹配規則

7.1 基本模式匹配

   一切從最基本的開始。模式,是正規表達式最基本的元素,它們是一組描述字符串特征的字符。模式可以很簡單,由普通的字符串組成,也可以非常復雜,往往用特殊的字符表示一個范圍內的字符、重復出現,或表示上下文。例如:

^once

  這個模式包含一個特殊的字符^,表示該模式只匹配那些以once開頭的字符串。例如該模式與字符串"once upon a time"匹配,與"There once was a man from NewYork"不匹配。正如如^符號表示開頭一樣,$符號用來匹配那些以給定模式結尾的字符串。

bucket$

  這個模式與"Who kept all of this cash in a bucket"匹配,與"buckets"不匹配。字符^和$同時使用時,表示精確匹配(字符串與模式一樣)。例如:

^bucket$

  只匹配字符串"bucket"。如果一個模式不包括^和$,那么它與任何包含該模式的字符串匹配。例如:模式

once

與字符串

There once was a man from NewYork
Who kept all of his cash in a bucket.

是匹配的。

   在該模式中的字母(o-n-c-e)是字面的字符,也就是說,他們表示該字母本身,數字也是一樣的。其他一些稍微復雜的字符,如標點符號和白字符(空格、制表符等),要用到轉義序列。所有的轉義序列都用反斜杠(\)打頭。制表符的轉義序列是:\t。所以如果我們要檢測一個字符串是否以制表符開頭,可以用這個模式:

^\t

類似的,用\n表示“新行”,\r表示回車。其他的特殊符號,可以用在前面加上反斜杠,如反斜杠本身用\\表示,句號.用\.表示,以此類推。
7.2 字符簇
在INTERNET的程序中,正規表達式通常用來驗證用戶的輸入。當用戶提交一個FORM以后,要判斷輸入的電話號碼、地址、EMAIL地址、信用卡號碼等是否有效,用普通的基于字面的字符是不夠的。
所以要用一種更自由的描述我們要的模式的辦法,它就是字符簇。要建立一個表示所有元音字符的字符簇,就把所有的元音字符放在一個方括號里:

[AaEeIiOoUu]

這個模式與任何元音字符匹配,但只能表示一個字符。用連字號可以表示一個字符的范圍,如:

[a-z] //匹配所有的小寫字母
[A-Z] //匹配所有的大寫字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的數字
[0-9\.\-] //匹配所有的數字,句號和減號
[ \f\r\t\n] //匹配所有的白字符

同樣的,這些也只表示一個字符,這是一個非常重要的。如果要匹配一個由一個小寫字母和一位數字組成的字符串,比如"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的話,用這個模式:

^[a-z][0-9]$

盡管[a-z]代表26個字母的范圍,但在這里它只能與第一個字符是小寫字母的字符串匹配。

前面曾經提到^表示字符串的開頭,但它還有另外一個含義。當在一組方括號里使用^是,它表示“非”或“排除”的意思,常常用來剔除某個字符。還用前面的例子,我們要求第一個字符不能是數字:

^[^0-9][0-9]$

這個模式與"&5"、"g7"及"-2"是匹配的,但與"12"、"66"是不匹配的。下面是幾個排除特定字符的例子:

[^a-z] //除了小寫字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了雙引號(")和單引號(')之外的所有字符

特殊字符"." (點,句號)在正規表達式中用來表示除了“新行”之外的所有字符。所以模式"^.5$"與任何兩個字符的、以數字5結尾和以其他非“新行”字符開頭的字符串匹配。模式"."可以匹配任何字符串,除了空串和只包括一個“新行”的字符串。

PHP的正規表達式有一些內置的通用字符簇,列表如下:

字符簇 含義
[[:alpha:]] 任何字母
[[:digit:]] 任何數字
[[:alnum:]] 任何字母和數字
[[:space:]] 任何白字符
[[:upper:]] 任何大寫字母
[[:lower:]] 任何小寫字母
[[:punct:]] 任何標點符號
[[:xdigit:]] 任何16進制的數字,相當于[0-9a-fA-F]

7.3 確定重復出現
到現在為止,你已經知道如何去匹配一個字母或數字,但更多的情況下,可能要匹配一個單詞或一組數字。一個單詞有若干個字母組成,一組數字有若干個單數組成。跟在字符或字符簇后面的花括號({})用來確定前面的內容的重復出現的次數。

字符簇 含義
^[a-zA-Z_]$ 所有的字母和下劃線
^[[:alpha:]]{3}$ 所有的3個字母的單詞
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于兩個a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 兩個制表符
.{2} 所有的兩個字符

這些例子描述了花括號的三種不同的用法。一個數字,{x}的意思是“前面的字符或字符簇只出現x次”;一個數字加逗號,{x,}的意思是“前面的內容出現x或更多的次數”;兩個用逗號分隔的數字,{x,y}表示“前面的內容至少出現x次,但不超過y次”。我們可以把模式擴展到更多的單詞或數字:

^[a-zA-Z0-9_]{1,}$ //所有包含一個以上的字母、數字或下劃線的字符串
^[0-9]{1,}$ //所有的正數
^\-{0,1}[0-9]{1,}$ //所有的整數
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小數

最后一個例子不太好理解,是嗎?這么看吧:與所有以一個可選的負號(\-{0,1})開頭(^)、跟著0個或更多的數字([0-9]{0,})、和一個可選的小數點(\.{0,1})再跟上0個或多個數字([0-9]{0,}),并且沒有其他任何東西($)。下面你將知道能夠使用的更為簡單的方法。

特殊字符"?"與{0,1}是相等的,它們都代表著:“0個或1個前面的內容”或“前面的內容是可選的”。所以剛才的例子可以簡化為:

^\-?[0-9]{0,}\.?[0-9]{0,}$

特殊字符"*"與{0,}是相等的,它們都代表著“0個或多個前面的內容”。最后,字符"+"與 {1,}是相等的,表示“1個或多個前面的內容”,所以上面的4個例子可以寫成:

^[a-zA-Z0-9_]+$ //所有包含一個以上的字母、數字或下劃線的字符串
^[0-9]+$ //所有的正數
^\-?[0-9]+$ //所有的整數
^\-?[0-9]*\.?[0-9]*$ //所有的小數

當然這并不能從技術上降低正規表達式的復雜性,但可以使它們更容易閱讀。


8.posix和perl標準的正則表達式區別

PHP同時使用兩套正則表達式規則,一套是由電氣和電子工程師協會(IEEE)制定的POSIX Extended 1003.2兼容正則(事實上PHP對此標準的支持并不完善),另一套來自PCRE(Perl Compatible Regular Expression)庫提供PERL兼容正則,這是個開放源代碼的軟件,作者為 Philip Hazel。

使用POSIX兼容規則的函數有:
ereg_replace()
ereg()
eregi()
eregi_replace()
split()
spliti()
sql_regcase()
mb_ereg_match()
mb_ereg_replace()
mb_ereg_search_getpos()
mb_ereg_search_getregs()
mb_ereg_search_init()
mb_ereg_search_pos()
mb_ereg_search_regs()
mb_ereg_search_setpos()
mb_ereg_search()
mb_ereg()
mb_eregi_replace()
mb_eregi()
mb_regex_encoding()
mb_regex_set_options()
mb_split()

使用PERL兼容規則的函數有:
preg_grep()
preg_replace_callback()
preg_match_all()
preg_match()
preg_quote()
preg_split()
preg_replace()

定界符:

POSIX兼容正則沒有定界符,函數的相應參數會被認為是正則。

PERL兼容正則可以使用任何不是字母、數字或反斜線(/)的字符作為定界符,如果作為定界符的字符必須被用在表達式本身中,則需要用反斜線轉義。也可以使用(),{},[] 和 <> 作為定界符

修正符:

POSIX兼容正則沒有修正符。

PERL兼容正則中可能使用的修正符(修正符中的空格和換行被忽略,其它字符會導致錯誤):

i (PCRE_CASELESS):
匹配時忽略大小寫。

m(PCRE_MULTILINE):
當設定了此修正符,行起始(^)和行結束($)除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符(/n)的之后和之前。

s(PCRE_DOTALL):
如果設定了此修正符,模式中的圓點元字符(.)匹配所有的字符,包括換行符。沒有此設定的話,則不包括換行符。

x(PCRE_EXTENDED):
如果設定了此修正符,模式中的空白字符除了被轉義的或在字符類中的以外完全被忽略。

e:
如果設定了此修正符,preg_replace() 在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,并用其結果來替換所搜索的字符串。 只有 preg_replace() 使用此修正符,其它 PCRE 函數將忽略之。

A(PCRE_ANCHORED):
如果設定了此修正符,模式被強制為“anchored”,即強制僅從目標字符串的開頭開始匹配。

D(PCRE_DOLLAR_ENDONLY):
如果設定了此修正符,模式中的行結束($)僅匹配目標字符串的結尾。沒有此選項時,如果最后一個字符是換行符的話,也會被匹配在里面。如果設定了 m 修正符則忽略此選項。

S:
當一個模式將被使用若干次時,為加速匹配起見值得先對其進行分析。如果設定了此修正符則會進行額外的分析。目前,分析一個模式僅對沒有單一固定起始字符的 non-anchored 模式有用。

U(PCRE_UNGREEDY):
使“?”的默認匹配成為貪婪狀態的。

X(PCRE_EXTRA):
模式中的任何反斜線后面跟上一個沒有特殊意義的字母導致一個錯誤,從而保留此組合以備將來擴充。默認情況下,一個反斜線后面跟一個沒有特殊意義的字母被當成該字母本身。

u(PCRE_UTF8):
模式字符串被當成UTF-8。

邏輯區隔:

POSIX兼容正則和PERL兼容正則的邏輯區隔符號作用和使用方法完全一致:
[]:包含任選一操作的相關信息。
{}:包含匹配次數的相關信息。
():包含一個邏輯區間的相關信息,可被用來進行引用操作。
|:表示“或”,[ab]和a|b是等價的。

元字符與“[]”相關:

有兩組不同的元字符:一種是模式中除了方括號內都能被識別的,還有一種是在方括號“[]”內被識別的。

POSIX兼容正則和PERL兼容正則“[]之外”“一致”的元字符:
/ 有數種用途的通用轉義符
^ 匹配字符串的開頭
$ 匹配字符串的結尾
? 匹配0或者1
* 匹配 0 個或多個前面指定類型的字符
+ 匹配 1 個或多個前面指定類型的字符

POSIX兼容正則和PERL兼容正則“[]之外”“不一致”的元字符:
. PERL兼容正則匹配除了換行符外的任意一個字符
. POSIX兼容正則匹配任意一個字符

POSIX兼容正則和PERL兼容正則“[]之內”“一致”的元字符:
/ 有數種用途的通用轉義符
^ 取反字符,但僅當其為第一個字符時有效
- 指定字符ASCII范圍,仔細研究ASCII碼,你會發現[W-c]等價于[WXYZ//^_`abc]

POSIX兼容正則和PERL兼容正則“[]之內”“不一致”的元字符:
- POSIX兼容正則中[a-c-e]的指定會拋出錯誤。
- PERL兼容正則中[a-c-e]的指定等價于[a-e]。

匹配次數與“{}”相關:

POSIX兼容正則和PERL兼容正則在匹配次數方面完全一致:
{2}:表示匹配前面的字符2次
{2,}:表示匹配前面的字符2次或多次,默認都是貪婪(盡可能多)的匹配
{2,4}:表示匹配前面的字符2次或4次

邏輯區間與“()”相關:

使用()包含起來的區域是一個邏輯區間,邏輯區間的主要作用是體現出一些字符出現的邏輯次序,另一個用處就是可以用來引用(可以將此區間內的值引用給一個變量)。后一個作用比較奇特:
<?php
$str = "http://www.163.com/";
// POSIX兼容正則:
echo ereg_replace("(.+)","<a href = //1 >//1</a>",$str);
// PERL兼容正則:
echo preg_replace("/(.+)/","<a href = $1 >$1</a>",$str);
// 顯示兩個鏈接
?>

在引用的時候,括號是可以嵌套的,邏輯次序是按照“(”出現的次序來標定的。

類型匹配:

POSIX兼容正則:
[:upper:]:匹配所有的大寫字母
[:lower:]:匹配所有的小寫字母
[:alpha:]:匹配所有的字母
[:alnum:]:匹配所有的字母和數字
[:digit:]:匹配所有的數字
[:xdigit:]:匹配所有的十六進制字符,等價于[0-9A-Fa-f]
[:punct:]:匹配所有的標點符號,等價于 [.,"'?!;:]
[:blank:]:匹配空格和TAB,等價于[ /t]
[:space:]:匹配所有的空白字符,等價于[ /t/n/r/f/v]
[:cntrl:]:匹配所有ASCII 0到31之間的控制符。
[:graph:]:匹配所有的可打印字符,等價于:[^ /t/n/r/f/v]
[:print:]:匹配所有的可打印字符和空格,等價于:[^/t/n/r/f/v]
[.c.]:功能不明
[=c=]:功能不明
[:<:]:匹配單詞的開始
[:>:]:匹配單詞的結尾

PERL兼容正則(這里可以看出PERL正則的強大):
/a alarm,即 BEL 字符('0)
/cx "control-x",其中 x 是任意字符
/e escape('0B)
/f 換頁符 formfeed('0C)
/n 換行符 newline('0A)
/r 回車符 carriage return('0D)
/t 制表符 tab('0)
/xhh 十六進制代碼為 hh 的字符
/ddd 八進制代碼為 ddd 的字符,或 backreference
/d 任一十進制數字
/D 任一非十進制數的字符
/s 任一空白字符
/S 任一非空白字符
/w 任一“字”的字符
/W 任一“非字”的字符
/b 字分界線
/B 非字分界線
/A 目標的開頭(獨立于多行模式)
/Z 目標的結尾或位于結尾的換行符前(獨立于多行模式)
/z 目標的結尾(獨立于多行模式)
/G 目標中的第一個匹配位置

分享:php gzip壓縮輸出的實現方法
本篇文章介紹了,在php中gzip壓縮輸出的實現方法。需要的朋友參考下

來源:模板無憂//所屬分類:PHP教程/更新時間:2013-04-28
相關PHP教程
色一情一区二区三区四区| 亚洲第一色中文字幕| 亚洲狼人国产精品| 国产亚洲综合av| 亚洲精品菠萝久久久久久久| 高清不卡一区二区在线| 国产日韩精品一区二区三区| 亚洲日本在线天堂| 一本大道综合伊人精品热热| 精品国产3级a| 欧美激情在线有限公司| 国产精品丝袜视频| 欧美亚洲一级二级| 女性女同性aⅴ免费观女性恋| 97在线免费公开视频| 国产精品无码自拍| 日韩激情小视频| 久久久久久在线观看| 欧美一级性视频| 成人h动漫精品| 亚洲综合色视频| 欧美一级搡bbbb搡bbbb| www.色综合| 91免费国产网站| 水蜜桃在线免费观看| 性色av浪潮av| 精品97人妻无码中文永久在线| 亚洲综合精品国产一区二区三区 | 999精品视频在线| 亚洲男人在线天堂| 伊人中文字幕在线观看| 日本系列欧美系列| 国产精品久久久久久久久动漫| 欧美日韩亚洲精品内裤| 自拍偷拍免费精品| 97se在线视频| 国产成人精品无码播放| 中国特黄一级片| 亚洲免费成人在线| 欧美国产精品v| 日韩美女一区二区三区四区| 97高清免费视频| 涩涩涩999| 无套白嫩进入乌克兰美女| 好吊妞视频一区二区三区| 免费看欧美女人艹b| 亚洲精品综合在线| 亚洲免费影视第一页| 成人福利免费观看| 成熟丰满熟妇高潮xxxxx视频| 人妻av无码一区二区三区 | 国产伦精品一区三区精东| 日韩不卡在线播放| 福利视频网站一区二区三区| 91激情五月电影| 国内外成人免费激情在线视频网站 | 亚洲va欧美va人人爽| 中文字幕在线看视频国产欧美| 国产精品久久亚洲7777| 亚洲va在线va天堂va偷拍| 高h视频免费观看| 国产精品一区二区不卡| 欧美三级乱人伦电影| 日韩av电影院| 亚洲 中文字幕 日韩 无码| 久久久久国产精品夜夜夜夜夜| 久久av资源网| 51精品久久久久久久蜜臀| 国产欧美精品在线播放| 8x8x最新地址| 在线免费看91| 亚洲欧美国产高清| 欧美交受高潮1| 被灌满精子的波多野结衣| 久草免费新视频| 97成人超碰视| 亚洲性av在线| 国产av第一区| 免费一级全黄少妇性色生活片| 国产原创一区二区三区| 日韩女优视频免费观看| 精品一区二区三区免费毛片| 色一情一交一乱一区二区三区| 美女爽到高潮91| 欧美一卡2卡3卡4卡| 韩国一区二区三区美女美女秀 | 日韩成人av电影在线| 亚洲精品国产91| 国产盗摄女厕一区二区三区| 亚洲精品视频二区| 一区二区三区四区免费观看| 日韩欧美亚洲视频| 亚洲欧洲另类国产综合| 91国产中文字幕| 国产精品v日韩精品v在线观看| 国产精品无码一区二区桃花视频| 亚洲va欧美va人人爽| 国产大片精品免费永久看nba| 日韩精品视频网址| 日本亚洲三级在线| 国产一区二区三区毛片| 人妻夜夜添夜夜无码av| 影音先锋国产资源| 欧美三级电影在线看| 国产精品一区视频| 青娱乐91视频| 亚洲高清中文字幕| 3d动漫啪啪精品一区二区免费 | 久久精品免视看| 久久免费视频观看| 日本少妇xxxx软件| 波多野洁衣一区| 欧美精品福利在线| 日本r级电影在线观看| 国产成人精品一区二| www日韩欧美| 国产色视频在线播放| 久久激情五月婷婷| 欧美精品在线视频观看| 日韩av成人网| 国产日韩欧美综合在线| 国产精品欧美日韩一区二区| 久久精品国产亚洲av麻豆| 国产日韩高清在线| 国产日韩欧美日韩大片| 久久久久久免费观看| 疯狂做受xxxx高潮欧美日本| 国产伦精品一区二区三区在线| 国产无遮挡裸体免费视频| 色综合天天综合色综合av| 欧美性bbwbbwbbwhd| 制服丝袜在线一区| 亚洲国产成人爱av在线播放| 久久久精品在线视频| 国产在线播放一区| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲男女在线观看| 中文字幕一区在线观看| 含羞草久久爱69一区| 亚洲网友自拍偷拍| 欧美日韩精品欧美日韩精品一| 亚洲码无人客一区二区三区| 欧美日韩一区二| 久久久黄色av| 精品88久久久久88久久久| 亚洲丝袜自拍清纯另类| 精品久久久免费视频| av成人免费网站| 欧美一级小视频| 在线免费观看成人网| 另类色图亚洲色图| 色成年激情久久综合| 蜜桃在线一区二区三区| 熟女人妻在线视频| 视频一区视频二区视频三区高| 亚洲精品一区二区三区香蕉| 久久午夜电影网| 波多野结衣一区二区三区在线 | 日本一区二区精品| 日韩成人小视频| 91色porny在线视频| 国产三级视频网站| 亚洲一二三区精品| 国产精品国产亚洲伊人久久| 国产偷国产偷亚洲清高网站| 午夜一区二区三区四区| 日韩a级黄色片| 国产精品吊钟奶在线| 中文字幕欧美亚洲| 一本一本久久a久久精品牛牛影视| 欧美极品第一页| 久久天堂电影网| 久久久久久网站| 欧美精品一区视频| 夜夜嗨av一区二区三区四季av| 北条麻妃在线观看视频| 黄色动漫网站入口| 3d动漫精品啪啪一区二区三区免费| 日韩电影在线观看永久视频免费网站| 国产精品久久久久久人| 久久久天堂国产精品| 拔插拔插海外华人免费| 精品国产免费久久久久久尖叫| 日韩在线资源网| 欧美精品一区二区三区蜜桃| 亚洲精选免费视频| 亚洲欧美日韩激情| 中文字幕伦理片| 欧美人与禽zozzo禽性配| 成人激情四射网| 久久久精品免费免费| 亚洲狼人国产精品| 动漫精品一区二区| 国产婷婷色一区二区三区在线| 秋霞午夜鲁丝一区二区老狼| 欧美88888| 双性尿奴穿贞c带憋尿| 国产亚洲天堂网| 日韩欧美在线电影| 精品国产a毛片| 亚洲免费视频成人| 99在线热播精品免费| 久久久久久久免费视频了| 亚洲av无码国产精品久久不卡| 中文字幕在线2021| 后入内射无码人妻一区| 国产原创精品| www.日韩欧美| 性欧美在线看片a免费观看| 久久6精品影院| 亚洲v国产v| 国产亚洲欧美精品久久久www| 日韩中文字幕亚洲一区二区va在线| 精品无人码麻豆乱码1区2区| 都市激情亚洲色图| 一本色道亚洲精品aⅴ| 日韩欧美综合在线视频| 国产成人亚洲综合a∨猫咪| 婷婷丁香花五月天| 国产免费黄色网址| 成人不卡免费av| 欧美日韩精品在线观看视频| 天堂在线资源视频| 亚洲精品视频在线播放| 99蜜桃在线观看免费视频网站| 日韩av资源在线| 色中文字幕在线观看| 777久久久精品一区二区三区 | 肉丝袜脚交视频一区二区| 日本不卡的三区四区五区| 久久精品99国产精品| 精品久久久久久久久久久| 欧美激情二区三区| 久久婷五月综合| a片在线免费观看| 一区二区三区av电影| 精品久久久久香蕉网| 日韩精品中文字幕在线播放| 9191精品国产综合久久久久久| 日韩一区二区三区av| 欧美刺激脚交jootjob| 国产亚洲欧美日韩一区二区| 亚洲一区二区三区视频| 日韩中文字幕在线观看| 在线观看国产91| 亚洲国产aⅴ天堂久久| 久久精品人人做人人爽97| 国产一区二区中文字幕| 丰满亚洲少妇av| 亚洲一区二区三区在线看| 亚洲人成网7777777国产| 国产视频精品xxxx| 国产精品网红直播| 久久人人爽人人爽人人av| 人妻 丝袜美腿 中文字幕| 日韩乱码一区二区三区| 日本高清视频www| 天堂蜜桃91精品| 高潮一区二区三区乱码| 国产精品一级黄| 综合在线观看色| 在线观看欧美日韩国产| 国产欧美一区二区三区在线看| 国产亚洲精品久久久久久| 亚洲天天在线日亚洲洲精| 一区二区三区黄色| 日韩小视频网址| 中文字幕日韩精品在线| 国产精品高清一区二区三区| 亚洲熟女一区二区三区| 久久影院一区二区| 日韩成人免费在线| 欧美日韩激情小视频| 97国产精品视频| 亚洲欧美日韩色| 成人一区二区三区中文字幕| 在线色欧美三级视频| 九九99久久| 久久久精品三级| 久久99久久98精品免观看软件| 久久成人麻豆午夜电影| 色综合色狠狠综合色| 日韩av片永久免费网站| 97久久国产亚洲精品超碰热| 黑鬼大战白妞高潮喷白浆| 国产亚洲精品成人a| 九九九在线视频| 亚洲老妇色熟女老太| 国产福利一区在线观看| 欧美岛国在线观看| 不卡视频一区二区三区| 美女黄色一级视频| 波多野结衣毛片| 在线看一区二区| 亚洲va久久久噜噜噜久久狠狠 | 国产一区二区三区免费看| 国产精品麻豆视频| 欧美成人性战久久| 亚洲a在线观看| 亚洲小视频网站| 国产一区二区视频在线| 久久久久国产精品厨房| 欧美综合久久久| 欧美日本精品在线| 亚洲人成网站在线观看播放| 亚洲午夜精品在线观看| 自拍偷拍色综合| 欧美性感一区二区三区| 亚洲精品欧美精品| 亚洲国产精品二区| 欧美日韩中文在线观看| 亚洲欧美日韩不卡一区二区三区| 国产性猛交╳xxx乱大交| 婷婷开心久久网| 国语精品免费视频| 日韩少妇裸体做爰视频| 中文字幕 久热精品 视频在线| 久久伊人色综合| 亚洲高清在线免费观看| 人人妻人人玩人人澡人人爽| 精品国产在天天线2019| 免费cad大片在线观看| 一区二区视频在线免费观看| 2021久久国产精品不只是精品| 亚洲国产成人在线播放| 日韩av电影免费在线| 国产在线综合网| 国产精品丝袜黑色高跟| 久久精品最新地址| 欧美另类z0zx974| 91成人在线观看喷潮| 国内精品在线观看视频| 黄片毛片在线看| 日本欧美国产在线| 日韩欧美一区二区一幕| 欧美xxx久久| 日韩高清精品免费观看| 国自在线精品视频| 亚洲欧美综合在线观看| 热草久综合在线| 熟妇人妻一区二区三区四区 | 中文字幕一区二区三区人妻在线视频 | 国产精品女主播av| 国产一级不卡视频| 久久精品人人做人人爽电影蜜月| 在线观看av一区二区| 国产精品久久一区二区三区| 日韩不卡在线播放| 日韩在线观看成人| 国产免费av观看| 欧美激情区在线播放| 日韩高清专区| 国产亚洲短视频| 成人av一级片| 99久久精品国产一区二区三区| 亚洲人高潮女人毛茸茸| 久久av无码精品人妻系列试探| 欧美精品xxxxbbbb| 亚洲一区在线不卡| 亚洲成人免费在线视频| 日本韩国免费观看| 欧美精品与人动性物交免费看| 国产精品午夜一区二区| 97中文在线| 亚洲国产精品黑人久久久| 一区二区免费av| 欧美国产亚洲一区| 国产有码一区二区| 国产又粗又猛又爽| 成人黄色生活片| 精品综合久久久久久8888| 久久久在线免费观看| 97精品人妻一区二区三区| 国产中文字幕91| 国产熟女一区二区三区四区| 天堂8在线视频| 欧美一区二区二区| 国产欧美高清在线| 国产欧美日韩精品在线| 国产区欧美区日韩区| 亚洲精品久久久久久动漫器材一区 | 国产美女精品人人做人人爽| 国产精品私拍pans大尺度在线 | 在线一区高清| 99久久婷婷国产综合精品电影| 一区二区三区高清国产| 特种兵之深入敌后| 手机看片福利日韩| 国产a√精品区二区三区四区| 久久久久久久久久久av| 日韩一区二区三区视频在线| 伊人久久综合97精品| 国产91精品久久久| 成人免费黄色网| 一区二区冒白浆视频| www.com毛片| 午夜福利三级理论电影| 国产精品白嫩白嫩大学美女| 91av久久久| 国产在线一区观看| 亚洲天堂av老司机| 欧美一级视频精品观看| 欧美美女18p| 国产无套精品一区二区| 精品视频在线观看一区| 亚洲蜜桃精久久久久久久久久久久| 激情综合网五月婷婷| 三级一区在线视频先锋| 日韩一区中文字幕| 欧美日韩在线观看一区二区 |