ereg 函數:(正則表達式匹配)

格式:int ereg ( string pattern, string string [, array &regs] ) 注意:使用 Perl 兼容正則表達式語法的 preg_match() 函數通常是比 er " /> 激情欧美一区二区三区,免费吃奶摸下激烈视频青青网,亚洲欧美人妖另类激情综合区

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

POSIX 風格和兼容 Perl 風格兩種正則表達式主要函數的類比(preg_match, preg_replace, ereg, ereg_replace)

首先來看看 POSIX 風格正則表達式的兩個主要函數:

ereg 函數:(正則表達式匹配)

格式:int ereg ( string pattern, string string [, array ®s] )
注意:使用 Perl 兼容正則表達式語法的 preg_match() 函數通常是比 ereg() 更快的替代方案。(一般的話還是使用 preg_match() ,比較好勒~~)

以區分大小寫的方式在 string 中尋找與給定的正則表達式 pattern 所匹配的子串。如果找到與 pattern 中圓括號內的子模式相匹配的子串并且函數調用給出了第三個參數 regs,則匹配項將被存入 regs 數組中。$regs[1] 包含第一個左圓括號開始的子串,$regs[2] 包含第二個子串,以此類推。$regs[0] 包含整個匹配的字符串。

返回值:如果在 string 中找到 pattern 模式的匹配則返回 所匹配字符串的長度,如果沒有找到匹配或出錯則返回 FALSE。如果沒有傳遞入可選參數 regs 或者所匹配的字符串長度為 0,則本函數返回 1。

來看看 ereg() 函數的例子:

以下代碼片斷接受 ISO 格式的日期(YYYY-MM-DD)然后以 DD.MM.YYYY 格式顯示:
復制代碼 代碼如下:
<?php
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
echo "$regs[3].$regs[2].$regs[1]";
} else {
echo "Invalid date format: $date";
}
?>

-----------------------------------------------------------------------------------
ereg_replace 函數:(正則表達式替換)

格式:string ereg_replace ( string pattern, string replacement, string string )
函數說明:
本函數在 string 中掃描與 pattern 匹配的部分,并將其替換為 replacement。
返回替換后的字符串。(如果沒有可供替換的匹配項則會返回原字符串。)
如果 pattern 包含有括號內的子串,則 replacement 可以包含形如 //digit 的子串,這些子串將被替換為數字表示的第幾個括號內的子串;//0 則包含了字符串的整個內容。最多可以用九個子串。括號可以嵌套,此情形下以左圓括號來計算順序。
如果未在 string 中找到匹配項,則 string 將原樣返回。
來看看這個函數例子吧:
1,下面的代碼片斷輸出 "This was a test" 三次:
復制代碼 代碼如下:
<?php
$string = "This is a test";
echo str_replace(" is", " was", $string);
echo ereg_replace("( )is", "http://1was", $string);
echo ereg_replace("(( )is)", "http://2was", $string);
?>

要注意的一點是如果在 replacement 參數中使用了整數值,則可能得不到所期望的結果。這是因為ereg_replace() 將把數字作為字符的序列值來解釋并應用之。例如:
2,replacement 參數為整數時的例子:
復制代碼 代碼如下:
<?php
/* 不能產生出期望的結果 */
$num = 4;
$string = "This string has four words.";
$string = ereg_replace('four', $num, $string);
echo $string; /* Output: 'This string has words.' */
/* 本例工作正常 */
$num = '4';
$string = "This string has four words.";
$string = ereg_replace('four', $num, $string);
echo $string; /* Output: 'This string has 4 words.' */
?>

3,將 URL 替換為超鏈接:
復制代碼 代碼如下:$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
"<a href=/"http://0/">//0</a>", $text);

提示: preg_replace() 函數使用了 Perl 兼容正則表達式語法,通常是比 ereg_replace() 更快的替代方案。
再來看看 Perl 兼容正則表達式的兩個主要函數:
preg_match 函數:(進行正則表達式匹配)
格式:int preg_match ( string pattern, string subject [, array matches [, int flags]] )
函數說明:
在 subject 字符串中搜索與 pattern 給出的正則表達式相匹配的內容。
如果提供了 matches,則其會被搜索的結果所填充。$matches[0] 將包含與整個模式匹配的文本,$matches[1] 將包含與第一個捕獲的括號中的子模式所匹配的文本,以此類推。
flags 可以是下列標記:
PREG_OFFSET_CAPTURE
如果設定本標記,對每個出現的匹配結果也同時返回其附屬的字符串偏移量。注意這改變了返回的數組的值,使其中的每個單元也是一個數組,其中第一項為匹配字符串,第二項為其偏移量。本標記自 php 4.3.0 起可用。
flags 參數自 php 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次數。要么是 0 次(沒有匹配)或 1 次,因為 preg_match() 在第一次匹配之后將停止搜索。preg_match_all() 則相反,會一直搜索到 subject 的結尾處。如果出錯 preg_match() 返回 FALSE。
Tips: 如果只想查看一個字符串是否包含在另一個字符串中,不要用 preg_match()。可以用 strpos() 或 strstr() 替代,要快得多。
來看看它的例子吧:
例 1. 在文本中搜索“php”:
復制代碼 代碼如下:
<?php
// 模式定界符后面的 "i" 表示不區分大小寫字母的搜索
if (preg_match ("/php/i", "php is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
?>

例 2. 搜索單詞“web”:
復制代碼 代碼如下:
<?php
/* 模式中的 /b 表示單詞的邊界,因此只有獨立的 "web" 單詞會被匹配,
* 而不會匹配例如 "webbing" 或 "cobweb" 中的一部分 */
if (preg_match ("http://bweb/b/i", "php is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
if (preg_match ("http://bweb/b/i", "php is the website scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
?>

例 3. 從 URL 中取出域名:
復制代碼 代碼如下:
<?php
// 從 URL 中取得主機名
preg_match("/^(http:////)?([^//]+)/i",
"http://www.php.NET/index.html", $matches);
$host = $matches[2];
// 從主機名中取得后面兩段
preg_match("/[^/.//]+/.[^/.//]+$/", $host, $matches);
echo "domain name is: {$matches[0]}/n";
?>

本例將輸出:
domain name is: php.NET
-----------------------------------------------------------------------------------
preg_replace 函數:(執行正則表達式的搜索和替換)
格式:mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
函數說明:
在 subject 中搜索 pattern 模式的匹配項并替換為 replacement。如果指定了 limit,則僅替換 limit 個匹配,如果省略 limit 或者其值為 -1,則所有的匹配項都會被替換。
replacement 可以包含 //n 形式或(自 php 4.0.4 起)$n 形式的逆向引用,首選使用后者。每個此種引用將被替換為與第 n 個被捕獲的括號內的子模式所匹配的文本。n 可以從 0 到 99,其中 //0 或 $0 指的是被整個模式所匹配的文本。對左圓括號從左到右計數(從 1 開始)以取得子模式的數目。
對替換模式在一個逆向引用后面緊接著一個數字時(即:緊接在一個匹配的模式后面的數字),不能使用熟悉的 //1 符號來表示逆向引用。舉例說 //11,將會使 preg_replace() 搞不清楚是想要一個 //1 的逆向引用后面跟著一個數字 1 還是一個 //11 的逆向引用。本例中的解決方法是使用 /${1}1。這會形成一個隔離的 $1 逆向引用,而使另一個 1 只是單純的文字。
來看看它的例子:
例 1. 逆向引用后面緊接著數字的用法:
復制代碼 代碼如下:
<?php
$string = "April 15, 2003";
$pattern = "/(/w+) (/d+), (/d+)/i";
$replacement = "/${1}1,/$3";
print preg_replace($pattern, $replacement, $string);
/* Output
======
April1,2003
*/
?>

如果搜索到匹配項,則會返回被替換后的 subject,否則返回原來不變的 subject。
preg_replace() 的每個參數(除了 limit)都可以是一個數組。如果 pattern 和 replacement 都是數組,將以其鍵名在數組中出現的順序來進行處理。這不一定和索引的數字順序相同。如果使用索引來標識哪個 pattern 將被哪個 replacement 來替換,應該在調用 preg_replace() 之前用 ksort() 對數組進行排序。
例 2. 在 preg_replace() 中使用索引數組:
復制代碼 代碼如下:
<?php
$string = "The quick brown fox jumped over the lazy dog.";
$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";
$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";
print preg_replace($patterns, $replacements, $string);
/* Output
======
The bear black slow jumped over the lazy dog.
*/
/* By ksorting patterns and replacements,
we should get what we wanted. */
ksort($patterns);
ksort($replacements);
print preg_replace($patterns, $replacements, $string);
/* Output
======
The slow black bear jumped over the lazy dog.
*/
?>

如果 subject 是個數組,則會對 subject 中的每個項目執行搜索和替換,并返回一個數組。
如果 pattern 和 replacement 都是數組,則 preg_replace() 會依次從中分別取出值來對 subject 進行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數組而 replacement 是字符串,則對 pattern 中的每個值都用此字符串作為替換值。反過來則沒有意義了。
/e 修正符使 preg_replace() 將 replacement 參數當作 php 代碼(在適當的逆向引用替換完之后)。提示:要確保 replacement 構成一個合法的 php 代碼字符串,否則 php 會在報告在包含 preg_replace() 的行中出現語法解析錯誤。
例 3. 替換數個值:
復制代碼 代碼如下:
<?php
$patterns = array ("/(19|20)(/d{2})-(/d{1,2})-(/d{1,2})/",
"/^/s*{(/w+)}/s*=/");
$replace = array ("http://3///4///1//2", "$//1 =");
print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");
?>

本例將輸出:
$startDate = 5/27/1999
例 4. 使用 /e 修正符:
復制代碼 代碼如下:
<?php
preg_replace ("/(<//?)(/w+)([^>]*>)/e",
"'//1'.strtoupper('//2').'//3'",
$html_body);
?>

這將使輸入字符串中的所有 HTML 標記變成大寫。
例 5. 將 HTML 轉換成文本:
復制代碼 代碼如下:
<?php
// $document 應包含一個 HTML 文檔。
// 本例將去掉 HTML 標記,Javascript 代碼
// 和空白字符。還會將一些通用的
// HTML 實體轉換成相應的文本。
$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 Javascript
"'<[///!]*?[^<>]*?>'si", // 去掉 HTML 標記
"'([/r/n])[/s]+'", // 去掉空白字符
"'&(quot|#34);'i", // 替換 HTML 實體
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(/d+);'e"); // 作為 php 代碼運行
$replace = array ("",
"",
"http://1",
"/"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(//1)");
$text = preg_replace ($search, $replace, $document);
?>

The End…

php技術POSIX 風格和兼容 Perl 風格兩種正則表達式主要函數的類比(preg_match, preg_replace, ereg, ereg_replace),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩美女一区二区三区 | 亚洲综合第一 | 第一页亚洲 | 久久精品国产精品青草不卡 | 天天做天天爱天天爽综合区 | 欧美一级久久 | 视频一区亚洲 | 99在线视频免费观看 | 一级亚洲 | 国产99久久精品一区二区 | 91久久精品国产一区二区 | 偷拍亚洲色图 | 5月色婷婷 | 国产精品一区二区久久精品涩爱 | 国产美女一区二区三区 | 欧美精品国产 | 亚洲欧美一区二区三区不卡 | 免费观看视频成人国产 | 人人爰人人人人人鲁 | 欧美色爱综合网 | 99久久香蕉国产综合影院 | 好吊色这里只有精品 | 国产日韩欧美成人 | 国产精品揄拍一区二区 | 亚洲激情综合在线 | 激性欧美在线播激性欧美 | 四虎国产精品免费久久久 | 国产成人亚洲综合小说区 | 手机日韩理论片在线播放 | 久久91av| 91网站在线免费观看 | 久久男女 | 欧美在线综合 | 日本xxx在线观看免费播放 | 国产免费看视频 | 久久成年人视频 | 免费成人在线观看 | 国产在线观看成人 | 久久亚洲日本不卡一区二区 | 欧美激情视频一区 | 欧美福利第一页 |