php正則函式一preg match

2021-09-01 16:35:23 字數 2521 閱讀 9595

《序》

php水平的高低取決於多方面的積累,包括系統架構、模組設計、**規範以及php的擴充套件啊等等,這些概念聽起來可能有些泛泛,一時半會兒也說不清;但可以肯定的是要想成為高水平的phper,一定得熟練地掌握php函式,手冊中對php函式的說明個人覺得有些生硬,所以我決定寫php函式系列博文,希望和大家共勉。每晚一篇。

今天給大家帶來php正則函式preg_match。php正則函式有兩個種類:perl風格的和posix風格。preg_match是perl風格的,函式名開始的p就是代表perl的,reg是regular的簡寫,match顧名思義吧。

函式原型:

<?php

preg_match ($pattern, $subject, array &$matches = null, $flags = null, $offset = null)

?>

引數注釋:

$pattern //正規表示式字串,格式為/^http/i,寫法跟js正規表示式一樣,正則的具體知識這裡就不介紹了。

$subject //要搜尋的字串

$matches //要存放匹配結果,注意這個引數是引用型別,並給了預設值

$flags //

$offset //

返回值:

false   ——當函式出錯時

1 ——當匹配到結果時

0——未匹配到結果時

這裡假設preg_match呼叫不出錯,其實preg_match返回的是匹配結果數。大家知道乙個字串去匹配正則時可能有不只乙個匹配結果,那為什麼這個函式只返回0或1呢,這是因為preg_match找到一次匹配就終止搜尋了。這就有點判斷字串中是否存在某某的意思?對了,就是這個意思,因為大家經常會碰到判斷字串中是否存在某某而不需要找出全部某某的情況,這個函式就是給你節省cpu和記憶體的。返回值1就是匹配到了,0就是未匹配到。

如果你需要把匹配的結果也取出來,那就傳個陣列給$matches,這個引數會把結果存起來,看個例項。

<?php

$url = "";

$matches = array();//存放匹配結果

$pattern = '/\.[^.|?]+\?/i';

$count = preg_match($pattern, $url, $matches);

var_dump($count);

var_dump($matches);

?>

輸出結果:

int 1

array (size=1)

0 => string '.php?' (length=5)

以上結果合你胃口不?合,對吧。

那麼再給你看個不合胃口的例子。

<?php

$url = "";

$matches = array();//存放匹配結果

$pattern = '/(\.)[^.|?]+(\?)/i';

$count = preg_match($pattern, $url, $matches);

var_dump($count);

var_dump($matches);

?>

猜猜會輸出什麼。

告訴你吧,輸出是這樣的。

int 1

array (size=3)

0 => string '.php?' (length=5)

1 => string '.' (length=1)

2 => string '?' (length=1)

為什麼?是不是覺著不可思議了,返回值是1,陣列裡卻存著3個結果。

對比下兩段**有什麼差異,會發現只是兩段**的$pattern表面上不一樣,請注意「表面上」這個用詞;確實,只是表面上不一樣,實際功能是一樣的;不信的話用正則工具測一下。那為什麼$matches陣列裡放的東西不一樣?

進一步來說明下preg_match的匹配模式:

preg_match以匹配$pattern為主要功能,未匹配成功返回0,$matches為空陣列;匹配成功返回1,$matches[0]存放匹配的結果。

如果$pattern中包含了()這種原子性的元字元,那麼preg_match會視()中的字串為子正則,比如/(\.)[^.|?]+(\?)/i 中的子正則有兩個,分別是(\.)和(\?),$matches[1]會存放(\.)匹配的結果,$matches[2]會存放(\?)匹配的結果;如果包含多個子正則的話,依次類推,注意,每個子正則也只匹配一次。明白了吧!

$flags和$offset這兩個引數用的情況不多,暫時就不說了,有需要再補充說明。

還有一點要說明,如果判斷字串中是否包含確定的子字串,請使用字串處理函式strstr。比如說要匹配ppp,就沒必要使用preg_match('/ppp/','abc***pfda'),直接使用strstr('ppp','abc***pfda')就可以了,這樣更高效。

php 所有PREG 正則函式

1.preg grep函式 preg grep pattern,array input 輸入陣列input中尋找匹配模式pattern的字串,並將所有的匹配字串返回。返回值就是所有匹配的字串組成的陣列。2.preg match函式 preg match pattern,string subject,...

PHP正則匹配的函式

pattern 0 9 subject aere7ewrwef2fwer2werwq4 replacement 力 pattern array 0123 456 789 subject array 0wer 51fas asfas replacement array 力 少 啊 a b array ...

PHP正規表示式函式

關於正規表示式 regular expression 似乎譯成 字串解析處理,較合乎字面上的意義。但目前所有的相關書籍都譯成正規表示式或是正規表示法.等等,實際上是負責字串解析比對,並對字串做相關的處理。ereg 字串比對解析。ereg replace 字串比對解析並取代。eregi 字串比對解析,...