正則表達式
<?php
$a = "time to shop";
if(preg_match('/shop/', $a)){
echo "yes";
}
else{
echo "no";
}
?>
結果如圖:
上面代碼的意思是在$a
中匹配shop
字符串,如果匹配成功,則立刻停止匹配並輸出yes,否則繼續匹配,直到沒有匹配項,便輸出no。
其中的shop
就是正則表達式。
//
是分隔符,每個表達式必須包含在一對分隔符中。可以選擇任何非字母、數字、“/”或空格來進行分隔,若要在匹配的字符串中加入“/”,則要用“\”進行轉義。例如:/http:/\/\/
。
有時要在結束分隔符之後加上模式修飾符,如:/shop/i
,該模式下將不區分大小寫匹配“shop”。
可以用"."匹配除換行符以外的任何字符的通配符。如:/.at/
可匹配“cat”、“mat”、“sat”、“#at”等字符串。通常情況下該匹配符用於匹配操作系統的文件名。
也可用/[a-z]at/
來匹配,/[a-z]at/
的意思是以小寫字母a到小寫字母z開頭的後面爲at的字符串,即:“aat”、“bat”、“cat”……一直到“zat”都能匹配。“-”表示一個範圍。
當表達式變成[^a-z]
,用來匹配任何不在a和z之間的字符。
預定義類
[[:alnum:]]
用來匹配文字(英文字母、單詞)數字字符。
[[:alpha:]]
用來匹配字母。
[[:asci:]]
匹配ACSII字符。
[[:space:]]
匹配空白字符。
[[:lower:]]
匹配小寫字母。
[[:upper:]]
匹配大寫字母。
[[:digit:]]
匹配小數。
[[:xdigit:]]
匹配十六進制數字。
等等。
注意,外部方括號是分隔字符類,而內部方括號是字符類名稱的一部分,如:
<?php
$a = '1234';
if(preg_match('/[[:alpha:]1-5]/',$a))
{echo 'yes';}
else
{echo 'no';}
?>
結果爲yes。當$a=abc
時,也輸出yes。其中正則表達式的意思爲匹配字母或1到5的數字。
重複
**“+”**可以表示這個模式可以出現1次或多次。
**“*”**可以表示這個模式可以出現0次或多次。
**“?”**可以表示這個模式可以出現0次或1次。
如:[[:alpha:]]+
表示“至少有一個字母字符”。
子表達式
用圓括號表示至少這些字符串的一個需要匹配該模式。如:
/(very)*large/
可以匹配"large"、“very large”、“very very large”。意思是匹配0次或多次出現very且必有large。
子表達式計數
用花括號中使用數字表達式指定內容允許重複的次數或可重複次數的範圍。如:
/(very){2,3}/
可以匹配“very very”、“very very very”、“very very very”。
定位到字符串開頭或末尾
脫字符號^
用於正則表達式的開始,如/^bob/
用來匹配字符開始處匹配bob。
注意,要和上面字符不屬於某個集合的用法區分開
$
字符用於正則表達式末尾,表示一定要出現在末尾。/com$/
即匹配以com結尾的字符串。
分支
可以用|
來進行模式選擇,如/com|edu|net/
即匹配以com、edu或net結尾的字符串。
匹配特殊字符
若要匹配".","{","$"
等特殊字符,需要在它前面加上轉義字符"\"
以轉義。若要匹配"\"
,則需要\\
來表示。
注意,正則表達式一般是用單引號來引用正則表達式模式,因爲用雙引號會造成很多不必要的麻煩,如下:
<?php
$a = "$";
if(preg_match("/\\\$/",$a))
{echo 'yes';}
else
{echo 'no';}
?>
結果如圖:
在這裏,用雙引號時,PHP解釋器將“\\\$”
解釋爲\$
,然後正則表達式解釋器將其解釋爲$
。