PHP正規表示式常用函式使用小結

2021-09-28 12:07:36 字數 4712 閱讀 5383

學習php正則的朋友不得不了解的一些函式,總結下php下正規表示式的呼叫方法。

在php中有兩套正規表示式函式庫。一套是由pcre(perl compatible regular expression)庫提供的。pcre庫使用和perl相同的語法規則實現了正規表示式的模式匹配,其使用以「preg_」為字首命名的函式。

另一套是由posix(portable operation system inte***ce)擴充套件庫提供的。posix擴充套件的正規表示式由posix 1003.2定義,一般使用以「ereg_」為字首命名的函式。

兩套函式庫的功能相似,執行效率稍有不同。一般而言,實現相同的功能,使用pcre庫的效率略佔優勢。下面詳細介紹其使用方法。

6.3.1 正規表示式的匹配

1.preg_match()

函式原型:int preg_match (string $pattern, string $content [, array $matches])

preg_match ()函式在$content字串中搜尋與$pattern給出的正規表示式相匹配的內容。如果提供了$matches,則將匹配結果放入其中。$matches[0]將包含與整個模式匹配的文字,$matches[1]將包含第乙個捕獲的與括號中的模式單元所匹配的內容,以此類推。

該函式只作一次匹配,最終返回0或1的匹配結果數。**6.1給出preg_match()函式的一段**示例。

**6.1 日期時間的匹配

**如下:

<?php

//需要匹配的字串。date函式返回當前時間

$content = "current date and time is ".date("y-m-d h:i a").

", we are learning php together.";

//使用通常的方法匹配時間

if (preg_match ("/\d-\d-\d \d:\d [ap]m/", $content, $m))

//由於時間的模式明顯,也可以簡單的匹配

if (preg_match ("/([\d-]) ([\d:] [ap]m)/", $content, $m))

?>

這是乙個簡單動態文字串匹配例項。假設當前系統時間是「2023年8月17日13點25分」,將輸出如下的內容。

匹配的時間是:2006-08-17 01:25 pm

當前日期是:2006-08-17

當前時間是:01:25 pm

2.ereg()和eregi()

ereg()是posix擴充套件庫中正規表示式的匹配函式。eregi()是ereg()函式的忽略大小寫的版本。二者與preg_match的功能類似,但函式返回的是乙個布林值,表明匹配成功與否。

需要說明的是,posix擴充套件庫函式的第乙個引數接受的是正規表示式字串,即不需要使用分界符。例如,**6.2是乙個關於檔名安全檢驗的方法。

**6.2 檔名的安全檢驗

**如下:

<?php

$username = $_server['remote_user'];

$filename = $_get['file'];

//對檔名進行過濾,以保證系統安全

if (!ereguserfile))

//對使用者名稱進行過濾

if (!eregusername))

//通過安全過濾,拼合檔案路徑

$thefile = "/home/$username/$filename";

?>

通常情況下,使用與perl相容的正規表示式匹配函式perg_match(),將比使用ereg()或eregi()的速度更快。如果只是查詢乙個字串中是否包含某個子字串,建議使用strstr()或strpos()函式。

3.preg_grep()

函式原型:array preg_grep (string $pattern, array $input)

preg_grep()函式返回乙個陣列,其中包括了$input陣列中與給定的$pattern模式相匹配的單元。對於輸入陣列$input中的每個元素,preg_grep()也只進行一次匹配。**6.

3給出的示例簡單地說明了preg_grep()函式的使用。

**6.3 陣列查詢匹配

**如下:

<?php

$subjects = array(

"mechanical engineering", "medicine",

"social science", "agriculture",

"commercial science", "politics"

); //匹配所有僅由有乙個單詞組成的科目名

$alonewords = preg_grep("/^[a-z]*$/i", $subjects);

?>

6.3.2 進行全域性正規表示式匹配

1.preg_match_all()

與preg_match()函式類似。如果使用了第三個引數,將把所有可能的匹配結果放入。本函式返回整個模式匹配的次數(可能為0),如果出錯返回false。

下面是乙個將文字中的url鏈結位址轉換為html**的示例。**6.4是 preg_match_all()函式的使用範例。

**6.4 將文字中的鏈結位址轉成html

**如下:

<?php

//功能:將文字中的鏈結位址轉成html

//輸入:字串

//輸出:字串

function url2html($text)

else

//生成html文字

$text = str_replace($link_url,"$link_text",$text);

} return $text;

} //執行例項

$str = 「這是乙個包含多個url鏈結位址的多行文字。歡迎訪問

print url2html($str);

/*輸出結果

這是乙個包含多個url鏈結位址的多行文字。歡迎訪問

*/?>

2.多行匹配

僅僅使用posix下的正則表式函式,很難進行複雜的匹配操作。例如,對整個檔案(尤其是多行文字)進行匹配查詢。使用ereg()對此進行操作的乙個方法是分行處理。

**6.5的示例演示了ereg()如何將ini檔案的引數賦值到陣列之中。

**6.5 檔案內容的多行匹配

**如下:

<?php

$rows = file('php.ini'); //將php.ini檔案讀到陣列中

//迴圈遍歷

foreach($rows as $line)

unset($matches);

} }//輸出引數結果

print_r($options);

?>

提示 這裡只是為了方便說明問題。解析乙個*.ini檔案,最佳方法是使用函式parse_ini_file()。該函式直接將*.ini檔案解析到乙個大陣列中。

6.3.3 正規表示式的替換

1.ereg_replace()和eregi_replace()

函式原型:string ereg_replace (string $pattern, string $replacement, string $string)

string eregi_replace (string $pattern, string $replacement, string $string)

ereg_replace()在$string中搜尋模式字串$pattern,並將所匹配結果替換為$replacement。當$pattern中包含模式單元(或子模式)時,$replacement中形如「\1」或「$1」的位置將依次被這些子模式所匹配的內容替換。而「\0」或「$0」是指整個的匹配字串的內容。

需要注意的是,在雙引號中反斜線作為轉義符使用,所以必須使用「\\0」,「 \\1」的形式。

eregi_replace()和ereg_replace()的功能一致,只是前者忽略大小寫。**6.6是本函式的應用例項,這段**演示了如何對程式源**做簡單的清理工作。

**6.6 源**的清理

**如下:

<?php

$lines = file('source.php'); //將檔案讀入陣列中

for($i=0; $i

2.preg_replace()

函式原型:mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])

preg_replace較ereg_replace的功能更加強大。其前三個引數均可以使用陣列;第四個引數$limit可以設定替換的次數,預設為全部替換。**6.

7是乙個陣列替換的應用例項。

**6.7 陣列替換

**如下:

<?php

//字串

$string = "name:

\nemail:

\naddress:

\n";

//模式

$patterns =array(

"//",

"//",

"//"

); //替換字串

$replacements = array (

"no.5, wilson st., new york, u.s.a",

"thomas ching",

"",); //輸出模式替換結果

print preg_replace($patterns, $replacements, $string);

?>

常用正規表示式

漢字 u4e00 u9fff 考證數字 0 9 考證n位的數字 d 考證至多n位數字 d 考證m n位的數字 d 考證零和非零開頭的數字 0 1 9 0 9 考證有兩位小數的正實數 0 9 0 9 考證有1 3位小數的正實數 0 9 0 9 考證非零的正整數 1 9 0 9 考證非零的負整數 1 9...

正規表示式

c 正規表示式經典分類整理集合手冊 作者 發布日期 2009 03 27 有一段時間,正規表示式學習很火熱很潮流,當時在csdn一天就能看到好幾個正規表示式的帖子,那段時間借助論壇以及wrox press出版的 c 字串和正規表示式參考手冊 學習了一些基礎的知識,同時也為我在csdn大概賺了1000...

正規表示式詳細

正規表示式是一種文字模式,包括普通字元 例如,a 到 z 之間的字母 和特殊字元 稱為 元字元 模式描述在搜尋文字時要匹配的乙個或多個字串。下面是正規表示式的一些示例 表示式匹配 s 匹配空行。d d 驗證由兩位數字 乙個連字元再加 5 位數字組成的 id 號。s s s s s s 1 s 匹配 ...