轉載原文地址為 https://www.cnblogs.com/bigvase/p/6647771.html
1.界定符 / 例:/[a]/ 匹配a
2.原子 unicode編碼中最小的單元符號,即一個字符。原子又分為可見原子,和不可見原子。可見原子是指unicode編碼表中可見的字符。不可見原子像回車,空格,制表符之類的
3.元字符
| 匹配兩個或則多個分支選擇,相當於邏輯判斷中的或者 例:/[a|v|b]/ 匹配a或者v或者b
[] 匹配中括號中的任意一個原子 例子: /[a]/ 匹配a這個原子
[^] 匹配除了中括號中的原子之外的任意字符 例子:/[^a]/ 匹配除了a字符以外的任意字符
3.原子的集合
. 點號是匹配除了換行符以為的任意字符
\d 匹配任意一個十進制的數字 例子:/\d/ 匹配任意一個十進制數字,和 /[0-9]/ 是一樣的效果
\D 匹配任意一個非十進制的數字 例子:/\D/ 匹配任意一個不是十進制的數字 和/[^0-9]/是一樣的效果
\s 匹配一個不可見的原子 例子:/\s/ 匹配一個不可見的原子 和 /\f\n\r\t\v/效果一樣
\f 匹配換頁字符。 \n 匹配換行字符。\r 匹配回車符字符。 \t 匹配制表字符。 \v 匹配垂直制表符。
\S 匹配一個可見原子 例子:/\S/ 匹配一個可見的原子 和 /^\f\n\r\t\v/效果一樣
\w 匹配任意一個數字、字母或下划線 例子: /\w/ 和 /a-zA-Z0-9_/ 效果一樣
\W 匹配任意一個非數字、字符或下划線 例子:/\W/ 和 /^a-zA-Z0-9_/ 效果一樣
4.量詞
{n} 匹配其前面的原子剛好出現n次 例子:/[a]{2}/ 匹配a字符剛好出現了2的字符串
{n,} 匹配其前面的原子至少出現了n次
{n,m} 匹配其前面的原子至少出現n次,至多出現了m次
* 匹配0次或者1次或則多次其之前的原子,相當於{0,}的簡寫
+ 匹配1次或者多次其之前的原子,也就是至少出現一次,相當於{1,}
? 匹配0次或則1次,也就是要么出現要么不出現 ,相當於{0,1}
5.邊界控制與模式單元:
^ 匹配字符串的開始位置
$ 匹配字符串結尾的位置
() 匹配其中的整體為一個原子
6.修正模式
U/u 懶惰匹配/貪婪模式
i 忽略英文字母大小寫
x 忽略空白
s 讓元字符','匹配包括換行符在內的所有字符
m, 默認情況下,PCRE 將目標字符串作為單一的一“行”字符所組成的。
e 如果設定了此修正符,preg_replace() 在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,並用其結果來替換所搜索的字符串。只有 preg_replace() 使用此修正符,其它 PCRE 函數將忽略之。
A(大寫)
如果設定了此修正符,模式被強制為“anchored”,即強制僅從目標字符串的開頭開始匹配。此效果也可以通過適當的模式本身來實現(在 Perl 中實現的唯一方法)。
D(大寫)
如果設定了此修正符,模式中的美元元字符僅匹配目標字符串的結尾。沒有此選項時,如果最后一個字符是換行符的話,美元符號也會匹配此字符之前(但不會匹配任何其它換行符之前)。如果設定了 m 修正符則忽略此選項。Perl 中沒有與其等價的修正符。
S(大寫)
當一個模式將被使用若干次時,為加速匹配起見值得先對其進行分析。如果設定了此修正符則會進行額外的分析。目前,分析一個模式僅對沒有單一固定起始字符的 non-anchored 模式有用。
u
此修正符啟用了一個 PCRE 中與 Perl 不兼容的額外功能。模式字符串被當成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起開始檢查模式的 UTF-8 合法性。
U(大寫)
本修正符反轉了匹配數量的值使其不是默認的重復,而變成在后面跟上“?”才變得重復。這和 Perl 不兼容。也可以通過在模式之中設定 (?U) 修正符或者在數量符之后跟一個問號(如 .*?)來啟用此選項。
X(大寫)
此修正符啟用了一個 PCRE 中與 Perl 不兼容的額外功能。模式中的任何反斜線后面跟上一個沒有特殊意義的字母導致一個錯誤,從而保留此組合以備將來擴充。默認情況下,和 Perl 一樣,一個反斜線后面跟一個沒有特殊意義的字母被當成該字母本身。當前沒有其它特性受此修正符控制。
一些常見正則表達式
郵箱: '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/'
網頁鏈接: '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/'
貨幣: '/^\d+(\.\d+)?$/'
正整數: '/^\d+$/'
壓縮包: '/^\d{6}$/'
整數: '/^[-\+]?\d+$/'
qq號碼:'/^\d{5,11}$/'
手機號碼: '/^1(3|4|5|7|8)\d{9}$/'
使用示例:
$pattern = "/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/"; $subject = '844053117@qq.com'; $data = preg_match($pattern, $subject); echo $data;
返回1代表成功,0代表失敗