人人人妻人人人妻人人人,99精品国产综合久久久久五月天 ,欧美白人最猛性XXXXX,日韩AV无码免费播放

News新聞

業(yè)界新聞動態(tài)、技術前沿
Who are we?

您的位置:首頁      樂道系統FAQ      php正則表達式基本知識與應用詳解【經典教程】

php正則表達式基本知識與應用詳解【經典教程】

標簽: 發(fā)布日期:2017-04-17 00:00:00 247

本文實例講述了php正則表達式基本知識與應用。分享給大家供大家參考,具體如下:

概述

正則表達式是一種描述字符串結果的語法規(guī)則,是一個特定的格式化模式,可以匹配、替換、截取匹配的字符串。常用的語言基本上都有正則表達式,如JavaScript、Java等。其實,只有了解一種語言的正則使用,其他語言的正則使用起來,就相對簡單些。文本主要圍繞解決下面問題展開。

① 有哪些常用的轉義字符
② 什么是限定符與定位符
③ 什么是單詞定位符
④ 特殊字符有哪些
⑤ 什么是逆向引用以及怎樣使用逆向引用
⑥ 匹配模式
⑦ php中怎樣使用正則表達式
⑧ php中哪些方面需要用到正則
⑨ 怎樣進行郵箱匹配,url匹配,手機匹配
⑩ 怎樣使用正則替換字符串中某些字符

⑪ 貪婪匹配與惰性匹配區(qū)別
⑫ 正則表達式之回溯與固態(tài)分組
⑬ 正則優(yōu)缺點有哪些

正則表達式的基本知識匯總

行定位符(^與$)

行定位符是用來描述字符串的邊界。“$”表示行結尾“^”表示行開始如"^de",表示以de開頭的字符串 "de$",表示以de結尾的字符串。

單詞定界符

我們在查找的一個單詞的時候,如an是否在一個字符串”gril and body”中存在,很明顯如果匹配的話,an肯定是可以匹配字符串“gril and body”匹配到,怎樣才能讓其匹配單詞,而不是單詞的一部分呢?這時候,我們可以是喲個單詞定界符\b。

\ban\b 去匹配”gril and body”的話,就會提示匹配不到。

當然還有一個大寫的\B,它的意思,和\b正好相反,它匹配的字符串不能使一個完整的單詞,而是其他單詞或字符串中的一部分。如\Ban\B。

選擇字符(|) ,表示或

選擇字符表示或的意思。如Aa|aA,表示Aa或者是aA的意思。注意使用”[]”與”|”的區(qū)別,在于”[]”只能匹配單個字符,而”|”可以匹配任意長度的字符串。在使用”[]”的時候,往往配合連接字符”-“一起使用,如[a-d],代表a或b或c或d。

排除字符,排除操作

正則表達式提供了”^”來表示排除不符合的字符,^一般放在[]中。如[^1-5],該字符不是1~5之間的數字。

限定符(?*+{n,m})

限定符主要是用來限定每個字符串出現的次數。

限定字符 含義
? 零次或一次
* 零次或多次
+ 一次或多次
{n} n次
{n,} 至少n次
{n,m} n到m次

如(D+)表示一個或多個D

點號操作符

匹配任意一個字符(不包含換行符)

表達式中的反斜杠(\)

表達式中的反斜杠有多重意義,如轉義、指定預定義的字符集、定義斷言、顯示不打印的字符。

轉義字符

轉義字符主要是將一些特殊字符轉為普通字符。而這些常用特殊字符有”.”,”?”、”\”等。

指定預定義的字符集

字符 含義
\d 任意一個十進制數字[0-9]
\D 任意一個非十進制數字
\s 任意一個空白字符(空格、換行符、換頁符、回車符、字表符)
\S 任意一個非空白字符
\w 任意一個單詞字符
\W 任意個非單詞字符

###顯示不可打印的字符

字符 含義
\a 報警
\b 退格
\f 換頁
\n 換行
\r 回車
\t 字表符

括號字符()

在正則表達式中小括號的作用主要有:

改變限定符如(|、* 、^)的作用范圍

如(my|your)baby,如果沒有”()”,|將匹配的是要么是my,要么是yourbaby,有了小括號,匹配的就是mybaby或yourbaby。

進行分組,便于反向引用

反向引用

反向引用,就是依靠子表達式的”記憶”功能,匹配連續(xù)出現的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。在下面php應用中,我將詳細展開學習反向引用。

模式修飾符

模式修飾符的作用是設定模式,也就是正則表達式如何解釋。php中主要模式如下表:

修飾符 說明
i 忽略大小寫
m 多文本模式
s 單行文本模式
x 忽略空白字符

正則表達式在php中應用

php中字符串匹配

所謂的字符串匹配,言外之意就是判斷一個字符串中,是否包含或是等于另一個字符串。如果不使用正則,我們可以使用php中提供了很多方法進行這樣的判斷。

不使用正則匹配

strstr函數

string strstr ( string haystack,mixedneedle [, bool $before_needle = false ])

注1:haystack是當事字符串,needle是被查找的字符串。該函數區(qū)分大小寫。

注2:返回值是從needle開始到最后。

注3:關于$needle,如果不是字符串,被當作整形來作為字符的序號來使用。

注4:before_needle若為true,則返回前東西。

stristr函數與strstr函數相同,只是它不區(qū)分大小寫

strpo函數

int strpos ( string haystack,mixedneedle [, int $offset = 0 ] )

注1:可選的 offset 參數可以用來指定從 haystack 中的哪一個字符開始查找。返回的數字位置是相對于 haystack 的起始位置而言的。

stripos -查找字符串首次出現的位置(不區(qū)分大小定)
strrpos -計算指定字符串在目標字符串中最后一次出現的位置
strripos -計算指定字符串在目標字符串中最后一次出現的位置(不區(qū)分大小寫)

使用正則進行匹配

在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:通常,搜索從目標字符串的開始位置開始??蛇x參數 offset 用于 指定從目標字符串的某個未知開始搜索(單位是字節(jié))。
返回值:preg_match()返回 pattern 的匹配次數。 它的值將是0次(不匹配)或1次,因為 preg_match()在第一次匹配后 將會停止搜索。 preg_match_all()不同于此,它會一直搜索subject直到到達結尾。 如果發(fā)生錯誤 preg_match()返回 FALSE。

實例

實例1

判斷字符串”http://blog.csdn.net/hsd2012“中是否包含csdn?

解法一(不使用正則):

如果不適用正則,我們使用strstr或者strpos中任意一個都可以,在此,我將使用strstr函數,代碼如下:

$str='http://blog.csdn.net/hsd2012';
function checkStr1($str,$str2)
{
 return strstr1($str,$str2)?true:false;
}
echo checkStr($str,'csdn');