欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2010年10月12日 10:23:23   作者:  
POSIX 風(fēng)格和兼容 Perl 風(fēng)格兩種正則表達(dá)式主要函數(shù)的類(lèi)比(preg_match, preg_replace, ereg, ereg_replace) ,需要的朋友可以參考下。
首先來(lái)看看 POSIX 風(fēng)格正則表達(dá)式的兩個(gè)主要函數(shù):

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

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

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

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

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

<?php
$string = "This is a test";
echo str_replace(" is", " was", $string);
echo ereg_replace("( )is", "\\1was", $string);
echo ereg_replace("(( )is)", "\\2was", $string);
?>

要注意的一點(diǎn)是如果在 replacement 參數(shù)中使用了整數(shù)值,則可能得不到所期望的結(jié)果。這是因?yàn)閑reg_replace() 將把數(shù)字作為字符的序列值來(lái)解釋并應(yīng)用之。例如:
2,replacement 參數(shù)為整數(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=\"\\0\">\\0</a>", $text);

提示: preg_replace() 函數(shù)使用了 Perl 兼容正則表達(dá)式語(yǔ)法,通常是比 ereg_replace() 更快的替代方案。
再來(lái)看看 Perl 兼容正則表達(dá)式的兩個(gè)主要函數(shù):
preg_match 函數(shù):(進(jìn)行正則表達(dá)式匹配)
格式:int preg_match ( string pattern, string subject [, array matches [, int flags]] )
函數(shù)說(shuō)明:
在 subject 字符串中搜索與 pattern 給出的正則表達(dá)式相匹配的內(nèi)容。
如果提供了 matches,則其會(huì)被搜索的結(jié)果所填充。$matches[0] 將包含與整個(gè)模式匹配的文本,$matches[1] 將包含與第一個(gè)捕獲的括號(hào)中的子模式所匹配的文本,以此類(lèi)推。
flags 可以是下列標(biāo)記:
PREG_OFFSET_CAPTURE
如果設(shè)定本標(biāo)記,對(duì)每個(gè)出現(xiàn)的匹配結(jié)果也同時(shí)返回其附屬的字符串偏移量。注意這改變了返回的數(shù)組的值,使其中的每個(gè)單元也是一個(gè)數(shù)組,其中第一項(xiàng)為匹配字符串,第二項(xiàng)為其偏移量。本標(biāo)記自 PHP 4.3.0 起可用。
flags 參數(shù)自 PHP 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次數(shù)。要么是 0 次(沒(méi)有匹配)或 1 次,因?yàn)?preg_match() 在第一次匹配之后將停止搜索。preg_match_all() 則相反,會(huì)一直搜索到 subject 的結(jié)尾處。如果出錯(cuò) preg_match() 返回 FALSE。
Tips: 如果只想查看一個(gè)字符串是否包含在另一個(gè)字符串中,不要用 preg_match()??梢杂?strpos() 或 strstr() 替代,要快得多。
來(lái)看看它的例子吧:
例 1. 在文本中搜索“php”:
復(fù)制代碼 代碼如下:

<?php
// 模式定界符后面的 "i" 表示不區(qū)分大小寫(xiě)字母的搜索
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" 單詞會(huì)被匹配,
* 而不會(huì)匹配例如 "webbing" 或 "cobweb" 中的一部分 */
if (preg_match ("/\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 ("/\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ù)說(shuō)明:
在 subject 中搜索 pattern 模式的匹配項(xiàng)并替換為 replacement。如果指定了 limit,則僅替換 limit 個(gè)匹配,如果省略 limit 或者其值為 -1,則所有的匹配項(xiàng)都會(huì)被替換。
replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首選使用后者。每個(gè)此種引用將被替換為與第 n 個(gè)被捕獲的括號(hào)內(nèi)的子模式所匹配的文本。n 可以從 0 到 99,其中 \\0 或 $0 指的是被整個(gè)模式所匹配的文本。對(duì)左圓括號(hào)從左到右計(jì)數(shù)(從 1 開(kāi)始)以取得子模式的數(shù)目。
對(duì)替換模式在一個(gè)逆向引用后面緊接著一個(gè)數(shù)字時(shí)(即:緊接在一個(gè)匹配的模式后面的數(shù)字),不能使用熟悉的 \\1 符號(hào)來(lái)表示逆向引用。舉例說(shuō) \\11,將會(huì)使 preg_replace() 搞不清楚是想要一個(gè) \\1 的逆向引用后面跟著一個(gè)數(shù)字 1 還是一個(gè) \\11 的逆向引用。本例中的解決方法是使用 \${1}1。這會(huì)形成一個(gè)隔離的 $1 逆向引用,而使另一個(gè) 1 只是單純的文字。
來(lái)看看它的例子:
例 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),則會(huì)返回被替換后的 subject,否則返回原來(lái)不變的 subject。
preg_replace() 的每個(gè)參數(shù)(除了 limit)都可以是一個(gè)數(shù)組。如果 pattern 和 replacement 都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來(lái)進(jìn)行處理。這不一定和索引的數(shù)字順序相同。如果使用索引來(lái)標(biāo)識(shí)哪個(gè) pattern 將被哪個(gè) replacement 來(lái)替換,應(yīng)該在調(diào)用 preg_replace() 之前用 ksort() 對(duì)數(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 是個(gè)數(shù)組,則會(huì)對(duì) subject 中的每個(gè)項(xiàng)目執(zhí)行搜索和替換,并返回一個(gè)數(shù)組。
如果 pattern 和 replacement 都是數(shù)組,則 preg_replace() 會(huì)依次從中分別取出值來(lái)對(duì) subject 進(jìn)行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數(shù)組而 replacement 是字符串,則對(duì) pattern 中的每個(gè)值都用此字符串作為替換值。反過(guò)來(lái)則沒(méi)有意義了。
/e 修正符使 preg_replace() 將 replacement 參數(shù)當(dāng)作 PHP 代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。提示:要確保 replacement 構(gòu)成一個(gè)合法的 PHP 代碼字符串,否則 PHP 會(huì)在報(bào)告在包含 preg_replace() 的行中出現(xiàn)語(yǔ)法解析錯(cuò)誤。
例 3. 替換數(shù)個(gè)值:
復(fù)制代碼 代碼如下:

<?php
$patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/",
"/^\s*{(\w+)}\s*=/");
$replace = array ("\\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)記變成大寫(xiě)。
例 5. 將 HTML 轉(zhuǎn)換成文本:
復(fù)制代碼 代碼如下:

<?php
// $document 應(yīng)包含一個(gè) HTML 文檔。
// 本例將去掉 HTML 標(biāo)記,javascript 代碼
// 和空白字符。還會(huì)將一些通用的
// 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 ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
$text = preg_replace ($search, $replace, $document);
?>

The End…

相關(guān)文章

  • php通過(guò)array_shift()函數(shù)移除數(shù)組第一個(gè)元素的方法

    php通過(guò)array_shift()函數(shù)移除數(shù)組第一個(gè)元素的方法

    這篇文章主要介紹了php通過(guò)array_shift()函數(shù)移除數(shù)組第一個(gè)元素的方法,涉及php中array_shift()函數(shù)操作數(shù)組的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • php讀取遠(yuǎn)程gzip壓縮網(wǎng)頁(yè)的方法

    php讀取遠(yuǎn)程gzip壓縮網(wǎng)頁(yè)的方法

    這篇文章主要介紹了php讀取遠(yuǎn)程gzip壓縮網(wǎng)頁(yè)的方法,當(dāng)站點(diǎn)使用gzip壓縮時(shí),使用常規(guī)的遠(yuǎn)程獲取方法會(huì)得到亂碼結(jié)果,使用本文方法即可解決這個(gè)問(wèn)題,需要的朋友可以參考下
    2014-12-12
  • PHP多例模式介紹

    PHP多例模式介紹

    學(xué)習(xí)java就知道設(shè)計(jì)模式中有多例模式
    2013-06-06
  • PHP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種常見(jiàn)方式總結(jié)

    PHP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種常見(jiàn)方式總結(jié)

    PHP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)有多種方式,常用的包括使用header()函數(shù)、使用JavaScript進(jìn)行跳轉(zhuǎn)、使用meta標(biāo)簽、使用超鏈接等,下面分別詳細(xì)介紹這幾種方式,并舉例說(shuō)明,需要的朋友可以參考下
    2023-11-11
  • PHP使用DOM對(duì)XML解析處理操作示例

    PHP使用DOM對(duì)XML解析處理操作示例

    這篇文章主要介紹了PHP使用DOM對(duì)XML解析處理操作,結(jié)合實(shí)例形式分析了php基于DOM模型針對(duì)xml進(jìn)行增刪改查相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • php驗(yàn)證碼的制作思路和實(shí)現(xiàn)方法

    php驗(yàn)證碼的制作思路和實(shí)現(xiàn)方法

    這篇文章主要介紹了php驗(yàn)證碼的制作思路和實(shí)現(xiàn)方法,我們不能盲目的去實(shí)現(xiàn)php生成驗(yàn)證碼,更應(yīng)該了解php驗(yàn)證碼的基本原理,真正的掌握php驗(yàn)證碼的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-11-11
  • php中str_pad()函數(shù)用法分析

    php中str_pad()函數(shù)用法分析

    這篇文章主要介紹了php中str_pad()函數(shù)用法,較為詳細(xì)的分析了php中str_pad()函數(shù)的功能、參數(shù)含義及具體使用方法,需要的朋友可以參考下
    2017-03-03
  • 詳解PHP中的mb_detect_encoding函數(shù)使用方法

    詳解PHP中的mb_detect_encoding函數(shù)使用方法

    這篇文章主要介紹了詳解PHP中的mb_detect_encoding函數(shù)使用方法,包括對(duì)字符串編碼的轉(zhuǎn)換和判斷以及Call to undefined function mb_detect_encoding()錯(cuò)誤的解決,需要的朋友可以參考下
    2015-08-08
  • 詳談PHP程序Laravel 5框架的優(yōu)化技巧

    詳談PHP程序Laravel 5框架的優(yōu)化技巧

    性能一直是 Laravel 框架為人詬病的一個(gè)點(diǎn),所以調(diào)優(yōu) Laravel 程序算是一個(gè)必學(xué)的技能。以下的十個(gè)技巧可以幫助你優(yōu)化PHP程序Laravel 5框架。
    2016-07-07
  • php微信開(kāi)發(fā)之批量生成帶參數(shù)的二維碼

    php微信開(kāi)發(fā)之批量生成帶參數(shù)的二維碼

    這篇文章主要介紹了php微信開(kāi)發(fā)之批量生成帶參數(shù)的二維碼 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06

最新評(píng)論