學習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 匹配 ...