定位字符是正則表達式中又一類很是重要的字符,它的主要做用是用於對字符在匹配對象中的位置進行描述。 git
^:表示匹配的模式出如今匹配對象的開頭(和在"[]"裏面不一樣) 正則表達式
$:表示匹配的模式出如今匹配對象的末尾 數組
空格:表示匹配的模式出如今開始和結尾的兩個邊界之一 ide
"/^he/":能夠匹配以"he"字符開頭的字符串,好比hello、height等等; 函數
"/he$/":能夠匹配以"he"字符結尾的字符串即she等; spa
"/ he/":空格開頭,和^的做用同樣,匹配以he開頭的字符串; 對象
"/he /":空格結束,和$的做用同樣,匹配以he結尾的字符串; 字符串
"/^he$/":表示只和字符串"he"匹配 input
2、特殊字符 string
元字符是正則表達式中一類有特殊意義的字符,用來描述其前導字符(即元字符前面的字符)在被匹配的對象中出現的方式。元字符自己是一個個單一的字符,可是不一樣或者相同的元字符組合起來能夠構成大的元字符。
元字符:
{}:大括號用來精確指定匹配元字符出現的次數。
/a{1,3}/ 表示字符a能夠出現1至3次
+:"+"字符用來匹配元字符前的字符出現一次或者屢次。
/a+/ 表示a能夠出現一次或者屢次
*:"*"字符用來匹配元字符前的字符出現零次或者屢次。
/a*/ 表示字符a能夠出現0到屢次
?:"?"字符用來匹配元字符前的字符出現零次或者1次。它還有一個很是重要的做用,即"貪婪模式"。
/a?/ 表示字符a能夠出現0到1次
.:用於匹配除換行符以外的全部字符,若是通過修飾符"s"的修飾,"."能夠表明任意字符。
|:表示在多個範圍選擇
中括號
正賊表達式中使用[]來表示匹配的範圍。
[a-z]:表示能夠出現a到z這26個小寫字母
[a-z]{1,3}:表示出現1至3個小寫字母
PHP正則表達式給出了幾種"[]"的默認值:
[:alpha:]:匹配任何字母
[:alnum:]:匹配任何字母和數字
[:digit:]:匹配任何數字
[:space:]:匹配空格符
[:upper:]:匹配任何大寫字母
[:lower:]:匹配任何小寫字母
[:punct:]:匹配任何標點符號
[:xdigit:]:匹配任何16進制數字
轉義符號
下面這些特殊字符在轉義符號""轉義後表明的含義以下:
s:匹配單個的空格符
S:用於匹配除單個空格符以外的全部字符。
d:用於匹配從0到9的數字,至關於"/[0-9]/"。
w:用於匹配字母,數字或下劃線字符,至關於"/[a-zA-Z0-9_]/"。
W:用於匹配全部與w不匹配的字符,至關於"/[^a-zA-Z0-9_]/"。
D:用於匹配任何非10進制的數字字符。
圓括號
PHP正則表達式容許使用()將表達式組合成一個總體。
^([a-z0-9]{3,6}):以3-6個小寫字母或數字開頭。
3、貪婪模式
好比咱們要匹配以字母"a"開頭字母"b"結尾的字符串,可是須要匹配的字符串在"a"後面含有不少個"b",好比"a bbbbbbbbbbbbbbbbb",那正則表達式是會匹配第一個"b"仍是最後一個"b"呢?若是你使用了貪婪模式,那麼會匹配到最後一個"b",反之只是匹配到第一個"b"。
使用貪婪模式的表達式以下:
/a.+?b/
/a.+b/U
不使用貪婪模式的以下:
/a.+b/
4、修飾符
在正則表達式裏面的修飾符能夠改變正則的不少特性,使得正則表達式更加適合你的須要(注意:修飾符對於大小寫是敏感的,這意味着"e"並不等於"E")。正則表達式裏面的修飾符以下:
i :若是在修飾符中加上"i",則正則將會取消大小寫敏感性,即"a"和"A" 是同樣的。
m:默認的正則開始"^"和結束"$"只是對於正則字符串若是在修飾符中加上"m",那麼開始和結束將會指字符串的每一行:每一行的開頭就是"^",結尾就是"$"。
s:若是在修飾符中加入"s",那麼默認的"."表明除了換行符之外的任何字符將會變成任意字符,也就是包括換行符!
x:若是加上該修飾符,表達式中的空白字符將會被忽略,除非它已經被轉義。
e:本修飾符僅僅對於replacement有用,表明在replacement中做爲PHP代碼。
A:若是使用這個修飾符,那麼表達式必須是匹配的字符串中的開頭部分。好比說"/a/A"匹配"abcd"。
E:與"m"相反,若是使用這個修飾符,那麼"$"將匹配絕對字符串的結尾,而不是換行符前面,默認就打開了這個模式。
U:和問號的做用差很少,用於設置"貪婪模式"。
5、正則表達式函數
PHP的Perl兼容正則表達式提供的多個函數,分爲模式匹配,替換和匹配數目等等:
1、preg_match :
函數格式:int preg_match(string pattern, string subject, array [matches]);
這個函數會在string中使用pattern表達式來匹配,若是給定了[regs],就會將string記錄到[regs][0]中,[regs][1]表明使用括號"()"記錄下來的第一個字符串,[regs][2]表明記錄下來的第二個字符串,以此類推。preg若是在string中找到了匹配的pattern,就會返回"true",不然返回"false"。
2、preg_replace :
函數格式:mixed preg_replace(mixed pattern, mixed replacement, mixed subject);
這個函數會使用將string中符合表達式pattern的字符串所有替換爲表達式replacement。若是replacement中須要包含pattern的部分字符,則能夠使用"()"來記錄,在replacement中只是須要用"/1"來讀取。
3、preg_split :
函數格式:array preg_split(string pattern, string subject, int [limit]);
這個函數和函數split同樣,區別僅在與split能夠使用簡單正則表達式來分割匹配的字符串,而preg_split使用徹底的Perl兼容正則表達式。第三個參數limit表明容許返回多少個符合條件的值。
4、preg_grep :
函數格式:array preg_grep(string patern , array input);
這個函數和preg_match功能基本上,不過preg_grep能夠將給定的數組input中的全部元素匹配,返回一個新的數組。