ereg 函數(shù):(正則表達(dá)式匹配)

格式:int ereg ( string pattern, string string [, array &regs] ) 注意:使用 Perl 兼容正則表達(dá)式語法的 preg_match() 函數(shù)通常是比 er " /> 久久亚洲热,成 人 免费 网站,一级毛片成人免费看免费不卡

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

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

首先來看看 POSIX 風(fēng)格正則表達(dá)式的兩個主要函數(shù):

ereg 函數(shù):(正則表達(dá)式匹配)

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

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

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

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

以下代碼片斷接受 ISO 格式的日期(YYYY-MM-DD)然后以 DD.MM.YYYY 格式顯示:
復(fù)制代碼 代碼如下:
<?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 函數(shù):(正則表達(dá)式替換)

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

要注意的一點(diǎn)是如果在 replacement 參數(shù)中使用了整數(shù)值,則可能得不到所期望的結(jié)果。這是因?yàn)閑reg_replace() 將把數(shù)字作為字符的序列值來解釋并應(yīng)用之。例如:
2,replacement 參數(shù)為整數(shù)時的例子:
復(fù)制代碼 代碼如下:
<?php
/* 不能產(chǎn)生出期望的結(jié)果 */
$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 替換為超鏈接:
復(fù)制代碼 代碼如下:$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
"<a href=/"http://0/">//0</a>", $text);

提示: preg_replace() 函數(shù)使用了 Perl 兼容正則表達(dá)式語法,通常是比 ereg_replace() 更快的替代方案。
再來看看 Perl 兼容正則表達(dá)式的兩個主要函數(shù):
preg_match 函數(shù):(進(jìn)行正則表達(dá)式匹配)
格式:int preg_match ( string pattern, string subject [, array matches [, int flags]] )
函數(shù)說明:
在 subject 字符串中搜索與 pattern 給出的正則表達(dá)式相匹配的內(nèi)容。
如果提供了 matches,則其會被搜索的結(jié)果所填充。$matches[0] 將包含與整個模式匹配的文本,$matches[1] 將包含與第一個捕獲的括號中的子模式所匹配的文本,以此類推。
flags 可以是下列標(biāo)記:
PREG_OFFSET_CAPTURE
如果設(shè)定本標(biāo)記,對每個出現(xiàn)的匹配結(jié)果也同時返回其附屬的字符串偏移量。注意這改變了返回的數(shù)組的值,使其中的每個單元也是一個數(shù)組,其中第一項(xiàng)為匹配字符串,第二項(xiàng)為其偏移量。本標(biāo)記自 php 4.3.0 起可用。
flags 參數(shù)自 php 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次數(shù)。要么是 0 次(沒有匹配)或 1 次,因?yàn)?preg_match() 在第一次匹配之后將停止搜索。preg_match_all() 則相反,會一直搜索到 subject 的結(jié)尾處。如果出錯 preg_match() 返回 FALSE。
Tips: 如果只想查看一個字符串是否包含在另一個字符串中,不要用 preg_match()。可以用 strpos() 或 strstr() 替代,要快得多。
來看看它的例子吧:
例 1. 在文本中搜索“php”:
復(fù)制代碼 代碼如下:
<?php
// 模式定界符后面的 "i" 表示不區(qū)分大小寫字母的搜索
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”:
復(fù)制代碼 代碼如下:
<?php
/* 模式中的 /b 表示單詞的邊界,因此只有獨(dú)立的 "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 中取出域名:
復(fù)制代碼 代碼如下:
<?php
// 從 URL 中取得主機(jī)名
preg_match("/^(http:////)?([^//]+)/i",
"http://www.php.NET/index.html", $matches);
$host = $matches[2];
// 從主機(jī)名中取得后面兩段
preg_match("/[^/.//]+/.[^/.//]+$/", $host, $matches);
echo "domain name is: {$matches[0]}/n";
?>

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

如果搜索到匹配項(xiàng),則會返回被替換后的 subject,否則返回原來不變的 subject。
preg_replace() 的每個參數(shù)(除了 limit)都可以是一個數(shù)組。如果 pattern 和 replacement 都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來進(jìn)行處理。這不一定和索引的數(shù)字順序相同。如果使用索引來標(biāo)識哪個 pattern 將被哪個 replacement 來替換,應(yīng)該在調(diào)用 preg_replace() 之前用 ksort() 對數(shù)組進(jìn)行排序。
例 2. 在 preg_replace() 中使用索引數(shù)組:
復(fù)制代碼 代碼如下:
<?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 是個數(shù)組,則會對 subject 中的每個項(xiàng)目執(zhí)行搜索和替換,并返回一個數(shù)組。
如果 pattern 和 replacement 都是數(shù)組,則 preg_replace() 會依次從中分別取出值來對 subject 進(jìn)行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數(shù)組而 replacement 是字符串,則對 pattern 中的每個值都用此字符串作為替換值。反過來則沒有意義了。
/e 修正符使 preg_replace() 將 replacement 參數(shù)當(dāng)作 php 代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。提示:要確保 replacement 構(gòu)成一個合法的 php 代碼字符串,否則 php 會在報(bào)告在包含 preg_replace() 的行中出現(xiàn)語法解析錯誤。
例 3. 替換數(shù)個值:
復(fù)制代碼 代碼如下:
<?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 修正符:
復(fù)制代碼 代碼如下:
<?php
preg_replace ("/(<//?)(/w+)([^>]*>)/e",
"'//1'.strtoupper('//2').'//3'",
$html_body);
?>

這將使輸入字符串中的所有 HTML 標(biāo)記變成大寫。
例 5. 將 HTML 轉(zhuǎn)換成文本:
復(fù)制代碼 代碼如下:
<?php
// $document 應(yīng)包含一個 HTML 文檔。
// 本例將去掉 HTML 標(biāo)記,Javascript 代碼
// 和空白字符。還會將一些通用的
// HTML 實(shí)體轉(zhuǎn)換成相應(yīng)的文本。
$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 Javascript
"'<[///!]*?[^<>]*?>'si", // 去掉 HTML 標(biāo)記
"'([/r/n])[/s]+'", // 去掉空白字符
"'&(quot|#34);'i", // 替換 HTML 實(shí)體
"'&(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 代碼運(yùn)行
$replace = array ("",
"",
"http://1",
"/"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(//1)");
$text = preg_replace ($search, $replace, $document);
?>

The End…

php技術(shù)POSIX 風(fēng)格和兼容 Perl 風(fēng)格兩種正則表達(dá)式主要函數(shù)的類比(preg_match, preg_replace, ereg, ereg_replace),轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 国产精品九九视频 | 国产一级做a爰片久久毛片男 | 日韩一区国产二区欧美三区 | 久久久久久91香蕉国产 | 色久悠悠色久在线观看 | 中文国产成人精品少久久 | 亚洲视频国产视频 | 国产在线视频二区 | 婷婷97狠狠的狠狠的爱 | 无遮挡一级毛片呦女视频 | 成人国产精品免费视频 | 国产婷婷色 | 激情网婷婷 | 成人91在线| 色视频免费在线 | 视频一区二区在线播放 | 337q日本大胆欧美人术艺术 | 91亚洲视频在线观看 | 一区二区三区在线观看视频 | 一区二区三区精品视频 | 亚洲经典激情春色另类 | 免费在线视频一区 | 久久免费精品 | 国产精品亚洲综合色拍 | 夜夜操影院 | 国产精品成人观看视频免费 | 国产一级特黄aa级特黄裸毛片 | 亚洲国产成人精品激情 | 精品a级片 | 一本久久精品一区二区 | 亚洲免费视频网址 | 一区二区在线免费视频 | 福利写真视频在线观看网站 | 高清 仑乱 一级 a | 亚洲精品午夜视频 | 99精品久久秒播无毒不卡 | 精品日韩一区 | 亚洲第一视频网 | 都市激情一区 | 六月激情 | 久久99国产精品免费观看 |