一、與Perl語言兼容的正則表達式處理函數
函數名 | 功能描述 |
preg_match() | 進行正則表達式匹配 |
preg_match_all() | 進行全局正則表達式匹配 |
preg_replace() | 進行正則表達式的搜索和替換 |
preg_split() | 用正則表達式分割字符串 |
preg_grep() | 返回與模式匹配的數組單元 |
preg_replace_callback() | 用回調函數執行正則表達式的搜索和替換 |
二、正則表達式的語法規則
正則表達式描述了一種字符串匹配的模式,通過這個模式在特定的函數中對字符串進行匹配、查找、替換及分割等操作。正則表達式作爲一個匹配的模板,是由原子(普通字符,例如字符a到z)、有特殊功能的字符(稱爲元字符,例如*、+和?等),以及模式修正符三部分組成的文字模式。一個表單密碼的正則表達式模式如下所示:
$zzpassword='/[a-z,A-Z,0-9,\m]{6,12}/';
1、定界符
在程序語言中,使用與Perl兼容的正則表達式,通常都需要將模式表達式放入定界符之間。作爲定界的字符也不僅僅侷限於使用斜線“/”。除了字母、數字和反斜線“\”以外的任何字符都可以作爲定界符號,例如# ! {} |等都是可以的。通常習慣將模式表達式包含在兩個斜線/之間。
2、原子
原子是正則表達式的最基本的組成單位,而且在每個模式中最少要包含一個原子。
(1)普通字符作爲原子
普通字符是編寫正則表達式時最常見的原子了,包括所有的大寫和小寫字母字符、所有數字等。例如a-z、A-Z、0-9.
(2)一些特殊字符和元字符作爲原子
任何一個符號都可以作爲原子使用,但如果這個符號在正則表達式中有一些特殊意義,我們就必須使用轉義字符“\”取消它的特殊意義,將其變成一個普通的原子。例如,所有的標點符號以及一些其他的符號,雙引號、單引號、* + .等,如果當原子,就必須像這樣\" \' \* \+ \.這樣使用。
(3)一些非打印字符作爲原子
所謂的非打印字符,是一些在字符串中的格式控制符號,例如空格、回車及製表符號等。
正則表達式中常用的非打印字符
原子字符 | 含義描述 |
\cx | 匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Z或a-z之一,否則,將c視爲一個原義的c字符 |
\f | 匹配一個換頁符。等價於\xOc和\cL |
\n | 匹配一個換行符。等價於\xOa和\cJ |
\r | 匹配一個回車符。等價於\xOd和\cM |
\t | 匹配一個製表符。等價於\xO9和\cI |
\v | 匹配一個垂直製表符。等價於\xOb和\cK |
'/\n/' //在Windows系統中用於匹配字符串中是否有回車換行出現
'/\r\n/' //在Linux系統中用於匹配字符串中是否有回車換行出現
3、元字符
利用Perl正則表達式還可以做另一件有用的事,就是使用各種元字符來搜索匹配。所謂元字符就是構建正則表達式的具有特殊含義的字符,如* + ?等。在一個正則表達式中,元字符不能單獨出現,它必須是用來修飾原子的。如果要在正則表達式中包含元字符本身,使其失去特殊的含義,則必須在其前面加上\進行轉義。
正則表達式的元字符
元字符 | 含義描述 |
* | 匹配0次、1次或多次其前的原子 |
+ | 匹配1次或多次其前的原子 |
? | 匹配0次、或1次其前的原子 |
. | 匹配除了換行符外的任意一個字符 |
| | 匹配兩個或多個分支選擇 |
{n} | 表示其前面的原子恰好出現n次 |
{n,} | 表示其前面的原子出現不少於n次 |
{n.m} | 表示其前面的原子至少出現n次,最多出現m次 |
^或\A | 匹配輸入字符串的開始位置(或在多行模式下行的開頭,即緊隨一換行符之後) |
$或\Z | 匹配輸入字符串的結束位置(或在多行模式下行的開頭,即緊隨一換行符之前) |
\b | 匹配單詞的邊界 |
\B | 匹配除單詞邊界以外的部分 |
[] | 匹配方括號中指定的任意一個原子 |
[^] | 匹配除方括號中的原子以外的任意一個原子 |
O | 匹配其整體爲一個原子,即模式單元,可以理解爲由多個單個原子組成的大原子 |
4、模式修正符
模式修正符在正則表達式定界符之外使用(最後一個斜線/之後)。
模式修正符號
模式修正符號 | |
i | 在和模式進行匹配時不區分大小寫 |
m | 將字符串視爲多行。默認的正則表達式開始^和結束$將目標字符串作爲單一的一“行”字符(甚至其中包含有換行符也是如此)。如果在修正符中加上“m”,那麼開始和結束將會指字符串的每一行,每一行的開頭就是^,結束就是$ |
s | 如果設定了次修正符,模式中的圓點元字符“.”匹配所有的字符,包括換行符。即將字符串視爲單行,換行符最爲普通字符看待。 |
x | 模式中的空白忽略不計,除非它已經被轉義 |
e | 只用在preg_replace()函數中,在替換字符串中對逆向引用做正常的替換,將其作爲PHP代碼求值,並用其結果來替換所搜索的字符串。 |
U | 本修正符反轉了匹配數量的值使其不是默認的重複,而變成在後面跟上“?”才變得重複。這和Perl不兼容。也可已通過在模式之中設置修正符“U”後者在數量符之後跟一個問號來用此選項。 |
D | 模式中的美元元字符僅匹配目標字符串的結尾。沒有此選項時,如果最後一個字符是換行符的話,美元符號也會匹配此字符之前。如果設定了m修正符則忽略此選項。 |
例如:模式“/Web Server/ix”可以用來匹配字符串“webServer”,忽略大小寫和空白。
三、與Perl兼容的正則表達式函數
正則表達式不能單獨使用,必須在相應的正則表達式函數中應用,才能實現對字符串的匹配、查找、替換及分割等操作。
1、字符串的匹配和查找
(1)preg_match()函數
該函數常用於表單驗證
(2)preg_match_all()函數
(3)preg_grep()函數
2、字符串的替換
(1)preg_replace()函數
(1)str_replace()函數
3、字符串的分割和連接
(1)preg_split()函數
(1)explode()函數
(1)implode()函數