正則表達式是一種描述字符串結果的語法規則,是一個特定的格式化模式,能夠匹配、替換、截取匹配的字符串。經常使用的語言基本上都有正則表達式,如JavaScript、java等。其實,只有瞭解一種語言的正則使用,其餘語言的正則使用起來,就相對簡單些。文本主要圍繞解決下面問題展開。php
行定位符是用來描述字符串的邊界。「$」
表示行結尾「^」
表示行開始如"^de"
,表示以de開頭的字符串 "de$"
,表示以de結尾的字符串。java
咱們在查找的一個單詞的時候,如an是否在一個字符串」gril and body」中存在,很明顯若是匹配的話,an確定是能夠匹配字符串「gril and body」匹配到,怎樣才能讓其匹配單詞,而不是單詞的一部分呢?這時候,咱們能夠是喲個單詞定界符\b。
\ban\b 去匹配」gril and body」的話,就會提示匹配不到。
固然還有一個大寫的\B,它的意思,和\b正好相反,它匹配的字符串不能使一個完整的單詞,而是其餘單詞或字符串中的一部分。如\Ban\B。正則表達式
選擇字符表示或的意思。如Aa|aA,表示Aa或者是aA的意思。注意使用」[]」與」|」的區別,在於」[]」只能匹配單個字符,而」|」能夠匹配任意長度的字符串。在使用」[]」的時候,每每配合鏈接字符」-「一塊兒使用,如[a-d],表明a或b或c或d。數組
正則表達式提供了」^」來表示排除不符合的字符,^通常放在[]中。如[^1-5],該字符不是1~5之間的數字。ruby
限定符主要是用來限定每一個字符串出現的次數。bash
限定字符 | 含義 |
---|---|
? | 零次或一次 |
* | 零次或屢次 |
+ | 一次或屢次 |
{n} | n次 |
{n,} | 至少n次 |
{n,m} | n到m次 |
如(D+)表示一個或多個D函數
匹配任意一個字符(不包含換行符)學習
\
)表達式中的反斜槓有多重意義,如轉義、指定預約義的字符集、定義斷言、顯示不打印的字符。atom
轉義字符主要是將一些特殊字符轉爲普通字符。而這些經常使用特殊字符有」.」,」?」、」\」等。url
字符 | 含義 |
---|---|
\d | 任意一個十進制數字[0-9] |
\D | 任意一個非十進制數字 |
\s | 任意一個空白字符(空格、換行符、換頁符、回車符、字表符) |
\S | 任意一個非空白字符 |
\w | 任意一個單詞字符 |
\W | 任意個非單詞字符 |
###顯示不可打印的字符
字符 | 含義 |
---|---|
\a | 報警 |
\b | 退格 |
\f | 換頁 |
\n | 換行 |
\r | 回車 |
\t | 字表符 |
在正則表達式中小括號的做用主要有:
反向引用,就是依靠子表達式的」記憶」功能,匹配連續出現的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。在下面php應用中,我將詳細展開學習反向引用。
模式修飾符的做用是設定模式,也就是正則表達式如何解釋。php中主要模式以下表:
修飾符 | 說明 |
---|---|
i | 忽略大小寫 |
m | 多文本模式 |
s | 單行文本模式 |
x | 忽略空白字符 |
所謂的字符串匹配,言外之意就是判斷一個字符串中,是否包含或是等於另外一個字符串。若是不使用正則,咱們可使用php中提供了不少方法進行這樣的判斷。
在php中,提供了preg_math()和preg_match_all函數進行正則匹配。關於這兩個函數原型以下:
int preg_match|preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
搜索subject與pattern給定的正則表達式的一個匹配.
pattern:要搜索的模式,字符串類型。
subject :輸入字符串。
matches:若是提供了參數matches,它將被填充爲搜索結果。 matches[0]將包含完整模式匹配到的文本,matches[1]將包含第一個捕獲子組匹配到的文本,以此類推。
flags:flags能夠被設置爲如下標記值:PREG_OFFSET_CAPTURE 若是傳遞了這個標記,對於每個出現的匹配返回時會附加字符串偏移量(相對於目標字符串的)。 注意:這會改變填充到matches參數的數組,使其每一個元素成爲一個由 第0個元素是匹配到的字符串,第1個元素是該匹配字符串 在目標字符串subject中的偏移量。
offset:一般,搜索從目標字符串的開始位置開始。可選參數 offset 用於 指定從目標字符串的某個未知開始搜索(單位是字節)。
返回值:preg_match()返回 pattern 的匹配次數。 它的值將是0次(不匹配)或1次,由於 preg_match()在第一次匹配後 將會中止搜索。 preg_match_all()不一樣於此,它會一直搜索subject直到到達結尾。 若是發生錯誤 preg_match()返回 FALSE。
$str='http://blog.csdn.net/hsd2012'; function checkStr1($str,$str2) { return strstr1($str,$str2)?true:false; } echo checkStr($str,'csdn');
解法二:使用正則
由於咱們只須要判斷是否存在便可,因此選擇preg_match。
$str='http://blog.csdn.net/hsd2012'; $pattern='/csdn/'; function checkStr2($str,$str2) { return preg_match($str2,$str)?true:false; } echo checkStr2($str,$pattern);
$pattern='/(\w).*\1.*\1/';
php中當替換字符串的時候,若是不適用正則,咱們一般使用substr、mb_substr、str_replace、substr_replace關於這幾個函數區別以下表。
函數符 | 功能 | 描述 |
---|---|---|
str_replace(find,replace,string,count) | 使用一個字符串替換字符串中的另外一些字符。 | find 必需。規定要查找的值。replace 必需。規定替換 find 中的值的值。string 必需。規定被搜索的字符串。count 可選。一個變量,對替換數進行計數。 |
substr_replace(string,replacement,start,length) | 把字符串的一部分替換爲另外一個字符串。適合用於替換自定位置的字符串。 | string 必需。規定要檢查的字符串。replacement 必需。規定要插入的字符串。start 必需。規定在字符串的何處開始替換。 |
若是使用正則替換,php中提供了preg_replace _callback和preg_replace 函數,preg_replace 原型以下:
mixed preg_replace ( mixed pattern,mixedreplacement , mixed subject[,intlimit = -1 [, int &count]])函數功能描述:在字符串subject中,查找pattern,然後使用replacement 去替換,若是有limit則代表限制替換limit次。pregreplacecallback與pregreplace功能相識,不同的是pregreplaceback使用一個回調函數ca