06.14 深入理解正則表達式

深入理解正則表達式

/* 1. 正則表達式就是描述字符串排列模式的一種自定義語法規則。

* 2. 如果可以使用字符串處理函數完成的任務,就不要使用正則

* 3. 有一些複雜的操作,只能使用正則完成。

*

* 正則表達式可以在很多計算機語言中應用

*

* 4. 正則表達式也稱為一種模式表達式。

* 5.正則表達式就是通過構建具有特定規則的模式,與輸入的字符信息比較。再進行分割、匹配、查找、替換等工作

*

* "/\\/"

*

* 一、正則表達式也是一個字符串

* 二、由具有特殊意義的字符組成的字符串

* 三、具有一點編寫規則,也是一種模式

* 四、看作是一種編程語言(是用一些特殊字符,按規則編寫出一個字符串,形成一種模式---正則表達式)

*

*

* 注意: 如果正則表達式,不和函數一起使用,則它就是一個字符串,如果將正則表達式放到到某個函數中使用, 才能發揮出正則表達式的作用。

*

* 用到分割函數中,就可以用這個正則去分割字符串

* 用到替換函數中,就可以用這個正則去替換字符串

* ...

*

*在PHP中給我們提供兩套正則表達式函數庫

POSIX 擴展正則表達式函數(ereg_)

Perl 兼容正則表達式函數(preg_)

這個函數功能一樣, 找一個處理字符串效率高的

注意:推薦使用Perl 兼容正則表達式函數庫(只學這一種)

學習正則表達式時,有兩方面需要學習:

一、正則表達式的模式如何編寫

語法:

1. 定界符號 //

除了字母、數字和正斜線\\ 以外的任何字符都可以為定界符號

| |

/ /

{ }

! !

沒有特殊需要,我們都使用正斜線作為正則表達式的定界符號

2. 原子 img \\s .

注意:原子是正則表達式的最基本組成單位,而且必須至少要包含一個原子

只要一個正則表達式可以單獨使用的字符,就是原子

1. 所有打印(所有可以在屏幕上輸出的字符串)和非打印字符(看不到的)

2. \\. \\* \\+ \\? \\( \\ 如果所有有意義的字符,想作為原子使用,統統使用 ”\\“轉義字符轉義 m

" \\ "轉義字符可以將有意的字符轉成沒意義的字符,還可以將沒意義的字符轉為有意義的字符

3. 在正則表達式中可以直接使用一些代表範圍的原子

\\d : 表示任意一個十進制的數字 [0-9]

\\D : 表示任意一個除數字這外的字符 [^0-9]

\\s : 表示任意一個空白字符,空格、\\n\\r\\t\\f [\\n\\r\\t\\f ]

\\S : 表示任意一個非空白 [^\\n\\r\\t\\f ]

\\w : 表示任意一個字 a-zA-Z0-9_ [a-zA-Z_]

\\W : 表示任意一個非字, 除了a-zA-Z0-9_以外的任意一個字符 [^a-zA-Z0-9_]

4. 自己定義一個原子表[], 可以匹配方括號中的任何一個原子

[a-z5-8]

[^a-z] 表示取反, 就是除了原子表中的原子,都可以表示(^必須在[]內的第一個字符處出現)

.

3. 元字符 * ?

元字符是一種特殊的字符,是用來修飾原子用的,不可以單獨出現

* : 表示其前的原子可以出現 0次、1次、或多次 {0,}

+ : 表示其前的原子可以出現1次 或多次, 不能沒有最少要有一個 {1,}

? : 表示其前面的原子可以出現0次或1次, 有隻能有一次,要麼沒有 {0,1}

{} : 用於自己定義前面原子出現的次數

{m} //m表示一個整數, {5}表示前面的原子出現5次

{m,n} //m和n表示一個整數,{2,5} m要小於n, 表示前面出現的原子,最少m次,最多n次,包括m和n次

{m,} //表示前面的原子最少出現m次,最多無限

. : 默認情況下,表示除換行符外任意一個字符

^ : 直接在一個正則表達式的第一個字符出現,則表達必須以這個正則表達式開始

$ : 直接在一個正則表達式的最後一個字符出現,則表達必須以這個正則表達式結束

| : 表示或的關係 , 它的優先級號是最低的, 最後考慮它的功能

\\b : 表示一個邊界

\\B : 表示一個非邊界

() : 重點

一、 () 作用: 是作為大原子使用

二、 改變優先級,加上括號可以提高優先級別

三、 作為子模式使用, 正則表達式不先對一個字符串匹配一次, 全部匹配作為一個大模式,放到數組的第一個元素中,每個()是一個子模式按順序放到數組的其它元素中去。

四、可以取消子模式,就將()作為大原子或改變優先級使用, 在括號中最前面使用"?:"就可以取消這個()表示的子模式

五、反向引用, 可以在模式中直接將子模式取出來,再作為正則表達式模式的一部分, 如果是在正則表達式像替換函數preg_replace函數中, 可以將子模式取出, 在被替換的字符串中使用

\\1 取第一個子模式、 \\2取第二個子模式, .... \\5 (注意是單引號還是雙引號引起來的正則)

"\\\\1"

'\\1'

${1} ${2}

\\* \\+ \\. \\?

\\

() (?:) []

* + ? {}

^ $ \\b

|

4. 模式修正符號 i u

"/ /模式修正符"

1. 就是幾個字母

2. 可以一次使用一個,每一個具一定的意義, 也可以連續使用多個

3. 是對整個正則表達式調優使用, 也可以說是對正則表達式功能的擴展

"/abc/" 只能匹配小寫字母 abc

"/abc/i" 可以不區分大小寫匹配 ABC abc Abc ABc AbC

i : 表示在和模式進行匹配進不區分大小寫

m : 默認情況,將字符串視為一行 ^ $ 視為多行後,任何一行都可以以正則開始或結束

s : 如果沒有使用這個模式修正符號時, 元字符中的"."默認不能表示換行符號,將字符串視為單行

x : 表示模式中的空白忽略不計

e : 正則表達式必須使用在preg_replace替換字符串的函數中時才可以使用(講這個函數時再說)

A :

Z :

U : 正則表達式的特點:就是比較”貪婪“ .* .+ 所有字符都符合這個條件

一種使用模式修正符號 U

加一種是使用?完成 .*? .+?

如果兩種方式同時出現又開啟了 貪婪模式 .*? /U

"/\\/iU"

"#\\#iU"

/原子和元字符/模式修正符號 / 為定界符號 (有一些語言是不需要這個定界符號)

有點語言中不支持模式修正符號 javascript

用戶名不能為空 /^\\S+$/

email

url

電話

將一個網站中的所有圖片取出

將一個網站的所有商品取出,

二、學習正則表達式的強大處理函數

preg_match();

深入理解正則表達式

*

*

*

*

*/

$pattern="/\\(.*?)\\/Ui"; //正則表達式模式

$string="helloaaaaaaphpaacaaaathis is testaaaaalampaaaaaaaa"; //需要和上面模式字符串進行匹配的變量字符串

if(preg_match_all($pattern, $string, $arr)){

echo "正則表達式 {$pattern} 和字符串 {$string} 匹配成功
";

echo '

';

print_r($arr);

echo '

';

}else{

echo "正則表達式{$pattern} 和字符串 {$string} 匹配失敗/<font>";

}

深入理解正則表達式


分享到:


相關文章: