正則表達式
1課程安排
目標:瞭解正則表達式的功能和使用場景,掌握基本正則書寫語法。
2正則表達式簡介
正則表達式是什麼
正則表達式本身就是一種語言,這在其它語言是通用的
正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。
strpos(‘abc’); //精確匹配 只能匹配字符串“abc”
正則表達式 //模糊匹配
在SQL中
Where name=’zhangsan’; //精確匹配
Where name like ‘zhang%’; //姓名以zhang開始的字符串
爲什麼使用(使用場景)
1)驗證郵箱 [email protected] [email protected] [email protected]
2)手機號 17002810530 15888888888 18777777777
3)銀行卡號
4)採集器
5)中獎信息 138****8888
6)屏蔽特殊詞彙
3入門
4常用的函數
preg_match()
preg_match_all()
preg_replace()
匹配模式
i忽略大小寫
x去除規則中的空白
U非貪婪
4幾個重要的概念
1子表達式
在正則匹配模式中,使用一對括號括起來的內容是一個子表式
2捕獲
在正則匹配模式中,子表達式匹配到的內容會被系統捕獲至系統的緩衝區中
3反向引用
捕獲之後,可以在匹配模式中,使用\n (n:數字)來引用系統的第n號緩衝區內容
5練習
1對稱字符
匹配幾個字母后面三個數字接着是前面字母的重複,比如:abc123abc
/(\w+)\d\d\d\1/ (\w+)\d+\1
2連續數字
匹配連續四個數字,比如abcd9527fadsas
/\d\d\d\d/
3對稱數字
查找這樣的數字
1221
4334
/(\d)(\d)\2\1/
4成對字符
查找類似:
AABB
KKLL
/(\w)\1(\w)\2/
5相同字符
比如:
AAAA
4444
/(\w)\1\1\1/
6匹配出姓名:
my name is xxx。
i am 18 years old.
6語法細節
正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱爲元字符)組成的文字模式。正則表達式作爲一個模板,將某個字符模式與所搜索的字符串進行匹配。
正則表達式的構成:
1)普通字符 :a b c d 1 2 3 4 ........
2)特殊字符(元字符):\d \D \w . .......
我們在寫正則表達式的時候,需要確定這樣幾件事:
1)我們要查什麼
2)我們要從哪查
3)我們要查多少
7限定符
限定符可以指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。
* 匹配前面的組件零次或多次
+ 匹配前面的組件一次或多次
? 匹配前面的組件零次或一次
{n} 匹配確定的 n 次
{n,} 至少匹配n 次
{n,m} 最少匹配 n 次且最多匹配 m 次
也可以使用以下方式表示:
* {0,}
+ {1,}
? {0,1}
8貪婪模式
如果在表達式的後面使用'?',表示非貪婪匹配原則,就會儘可能匹配少的,示例如下:
$reg = '/<.*?>/'; $str = '<span>1111</span><span>222</span>'; preg_match_all($reg, $str, $rst); var_dump($rst); array(1) { [0]=> array(4) { [0]=> string(6) "<span>" [1]=> string(7) "</span>" [2]=> string(6) "<span>" [3]=> string(7) "</span>" } }
9字符匹配符
字符匹配符用於匹配某個或某些字符
1字符簇
[a-z] :表示a-z任意一個字符
[A-Z] :表示A-Z任意一個字符
[0-9] :表示0-9任意一個數字
[0-9a-z] :表示0-9 a-z任意一個字符
[0-9a-zA-Z] :表示0-9 a-z A-Z任意一個字符
[abcd] :表示a 或b 或c 或 d
[1234] :表示 1 或2 或3 或 4
[^a-z] :表示匹配除了a-z之間任意一個字符
[^0-9] :表示匹配除了0-9之間任意一個字符
[^abcd] :表示匹配除a b c d 之外的任意一個字符
\d :匹配一個數字字符。[0-9]
\D :匹配一個非數字字符。[^0-9]
\w :匹配包括下劃線的任何單詞字符。[0-9a-zA-Z_]
\W :匹配任何非單詞字符。[^\w]
\s :匹配任何空白字符 空格、製表符、換行符
\S :匹配任何非空白字符。
. :匹配除 "\n" 之外的任何單個字符 如果想匹配任意字符 [.\n]
2定位符
定位符可以將一個正則表達式固定在一行的開始或結束。也可以創建只在單詞內或只在單詞的開始或結尾處出現的正則表達式。
^ 匹配輸入字符串的開始位置
$ 匹配輸入字符串的結束位置
\b 匹配一個單詞邊界
\B 匹配非單詞邊界
3轉義符
\ 用於匹配某些特殊字符
需要轉義的字符有:
(
)
[
]
{
}
\
.
/
*
+
?
^
$
4選擇匹配符
| 可以匹配多個規則,|兩邊各是一個選項
$str = 'hello,world,hello,php'; $reg = '/hello,world|php/';//hello,worldphp $reg = '/hello,(world|php)/';hello,worldhello,php
5表達式的分界符
表達式必須用分隔符閉合, 比如一個正斜槓(/). 分隔符可以使任意非字母、數字、反斜槓(\)和空字節之外的非空白ascii字符. 如果分隔符 在表達式中使用, 需要使用反斜線進行轉義. 自php 4.0.4開始, 可以使用perl樣式的(), {}, []以及<>作爲分隔符.
練習:
郵箱地址
用戶名可以是字母數字下劃線
域名必須有點,最後一段不能帶有數字
[email protected] 不合法的
admin@cc 不合法的
用戶名部分:字母數字下劃線
\w+
@
域名部分
\w+\.[a-z]+
參考答案:\w+@(\w+\.)+[a-z]+
匹配IP地址
0-255第一段不能是0
[1-9]
[1-9][0-9]
1[0-9][0-9]
2[0-4][0-9]
25[0-5]
第二段:
[0-9]
[1-9][0-9]
1[0-9][0-9]
2[0-4][0-9]
25[0-5]
第三段和第二段一樣
關於正則表達式的幾種特殊用法
轉載自:http://www.codexueyuan.com/learn/learn-detail187