正則表達式是個最最令人頭疼的東西,每次寫每次查,記憶時間過不超過三分鐘(可能還是多說的),正則表達式也有幾種標准,posix和perl標准等。正則表達式不只在Perl、Python、Bash、JAVA等語言中使用,通過擴展或升級,幾乎所有語言都會涉及,但是格式和標准未必相同,所以一切以測試為准。目前PHP支持以上兩種正則表達式。
PCRE規定正則表達式需要使用定界符(/)。所有的語句均寫在定界符內,主要“段型”(天緣自己叫法)規則如下:
如下符號,如需匹配本身,必須在其前面增加一個轉義字符 \,這些字符包括:
( ) [ ] . * ? + ^ | $ \ /
比如\[表示匹配[符號,\\表示匹配一個反斜槓,以此類推。
/ 定界符
^ 匹配字符串的開始
$ 匹配字符串的結束
. 匹配除換行符意外的任意字符
? 零或一個緊接前的字符
* 零或多個緊接前的字符
+ 一或多個緊接前的字符
\w 匹配字母或數字或下劃線
\s 匹配任意的空白符,所謂空白字符是指:空格、制表符、換頁符等
\d 匹配數字
\b 匹配單詞的開始或結束
\W \w的反義,即匹配任意非字母,數字,下劃線和漢字的字符
\S \s的反義,即匹配任意非空白符的字符
\D \d的反義,即匹配任意非數字的字符
\B \b的反義,即不是單詞開頭或結束的位置
[x] 匹配x字符,如,[a-z] 所有小寫字母,[A-Z] 所有大寫字母,[0-9] 所有數字
[^x] 匹配除了 x 之外的任意字符,如 [^abc] 匹配除了 abc 這幾個字母之外的任意字符
{3} 3個緊接前的字符
{5,15} 5-15個緊接前的字符
(red|green|blue) Red 或 green 或 blue
天 緣自己總結了一下,正則表達式用途大概有三:
1、正則替換例子:
$str = '/*ddd*/sss';
preg_replace('[(/*)+.+(*/)]', '', $str);
print_r($str);
這段代碼可以替換所有以/*開頭並以*/結束的部分為空,也就是批量去除注釋。
2、正則提取例子:
$str = '/username/';
preg_match("/^(\/)([^\/.]+)(\/)/",$str,$Arr);
print_r($Arr);
該段代碼可以提取$str中的username部分,結果在$Arr[2]中。打印$Arr輸出如下:
Array ( [0] => /username/ [1] => / [2] => username [3] => / )
preg_split 可以將整段字符串按匹配到的正則表達式分割成 1、2或更多字符的多段。比如獲取標簽,無論是用空格還是逗號分隔的:
$tags = preg_split('/[,]/', 'my,tags,unevenly,spaced');
print_r($tags);
3、正則驗證例子:
這個用的最多了,比如驗證密碼:
preg_match( "/^\d*$/",$str);
這句話匹配$str是否全是數字。