正則表達式在所有編程語言中都是比較重要的知識,php也提供了正則表達式可以通過正則來進行字符串查找和替換,基本上我們可以把java的正則用在php上
一 正則規范
1.常用的正則規范
\w 表示字母、數字、下劃線
\W 表示非字母、數字、下劃線
\d 表示數字
\D 表示非數字
\s 表示所有空白字符(換行、空格等)
\S 表示所有非空白字符
^ 行的開頭(用於定界)
$ 行的結尾(用於定界)
. 匹配除換行之外的任意字符
[abc] 字符a,b,c
[^abc] 除了a,b,c之外的任意字符
[a-zA-Z0-9] 表示由字母、數字組成
\n 表示換行
\\ 表示反斜槓
2.數量表示(X表示一組規范)
X? 可以出現0次或1次
X+ 可以出現1次或多次
X* 可以出現0次、1次或多次
X{n} 必須出現n次
X{n,} 必須出現n次以上
X{n,m} 必須出現n至m次
3.邏輯運算符(X、Y表示一組規范)
XY X規范後跟著Y規范
(X) 作為一個捕獲組規范(子表達式)
X|Y X規范或Y規范
二 php中怎樣使用正則
1.使用正則表達式查找固定格式的字符
php提供了preg_match()和preg_match_all()兩個方法供我們使用,使用這兩個方法可以做字符串格式校驗和查找
(1) 取出字符串裡的所有四位數
使用之前要注意,php裡規定我們把正則規范寫在P的位置上 ‘/P/i’,先就取四位數這個舉例,代碼如下
echo "取出字符串裡的所有四位數
"; $str1="abcd1034yu3029"; preg_match_all('/\d{4}/i', $str1,$arr1); foreach ($arr1[0] as $val){ echo "$val"."
"; }
(2)取出類似1111、3333這種格式的字符串
這種情況就要使用字表達式了,代碼如下
echo "下面是兩段代碼的運行效果取出字符串裡的4位數要求每位數字都相同,例如1111、4444、5555、6666
"; $str2="abcd1034yu3029sd3333"; preg_match_all('/(\d)\1{3}/i', $str2,$arr2); foreach ($arr2[0] as $val){ echo "$val"."
"; }
(3)取出類似1111-2222-3333這種格式的字符串
echo "取出類似1111-2222-3333這種格式的字符串
"; $str3="ab3333-5555-6666cd1034yu3029sd3333"; preg_match_all('/(\d)\1{3}-(\d)\2{3}-(\d)\3{3}/i', $str3,$arr3); foreach ($arr3[0] as $val){ echo "$val"."
"; }
(4)來一個稍微復雜點的,取出類似1111-232-3333、1111-575-3333這種格式的字符串的最後4個數字
echo "取出類似1111-232-3333、1111-575-3333這種格式的字符串的最後4個數字
"; $str4="ab3333-575-6666cd10348888-464-9999"; preg_match_all('/(\d)\1{3}-(\d)\d\2-(\d)\3{3}/i', $str4,$arr4); foreach ($arr4[0] as $val){ $nums=explode("-", $val); echo "$nums[2]"."
"; }
(5)過濾重復字符<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHByZSBjbGFzcz0="brush:java;">echo "
2.還有一種比較復雜的匹配叫環視匹配