国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 後端開發(fā) php教程 POSIX 風(fēng)格和兼容 Perl 風(fēng)格兩種正則表達(dá)式主要函數(shù)的類比(preg_match, preg_replace,_PHP教程

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

Jul 21, 2016 pm 03:33 PM
e match perl posix replace 主要 相容 函數(shù) 正規(guī)則 表達(dá)式 風(fēng)格

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

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

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

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

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

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

以下代碼片斷接受 ISO 格式的日期(YYYY-MM-DD)然后以 DD.MM.YYYY 格式顯示:

復(fù)制代碼 代碼如下:

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。
返回替換后的字符串。(如果沒有可供替換的匹配項(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ù)制代碼 代碼如下:

$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ù)制代碼 代碼如下:

/* 不能產(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:]/]",
"\\0", $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)中的子模式所匹配的文本,以此類推。
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 次(沒有匹配)或 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ù)制代碼 代碼如下:

// 模式定界符后面的 "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ù)制代碼 代碼如下:

/* 模式中的 \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ù)制代碼 代碼如下:

// 從 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 開始)以取得子模式的數(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ù)制代碼 代碼如下:

$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ù)制代碼 代碼如下:

$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)則沒有意義了。
/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ù)制代碼 代碼如下:

$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ù)制代碼 代碼如下:

preg_replace ("/(]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>

這將使輸入字符串中的所有 HTML 標(biāo)記變成大寫。
例 5. 將 HTML 轉(zhuǎn)換成文本:
復(fù)制代碼 代碼如下:

// $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…

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/322544.htmlTechArticle首先來(lái)看看 POSIX 風(fēng)格正則表達(dá)式的兩個(gè)主要函數(shù): ereg 函數(shù):(正則表達(dá)式匹配) 格式:int ereg ( string pattern, string string [, array lt;?php if (...
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
golang函數(shù)動(dòng)態(tài)建立新函數(shù)的技巧 golang函數(shù)動(dòng)態(tài)建立新函數(shù)的技巧 Apr 25, 2024 pm 02:39 PM

Go語(yǔ)言提供了兩種動(dòng)態(tài)函數(shù)創(chuàng)建技術(shù):closures和反射。 closures允許存取閉包作用域內(nèi)的變量,而反射可使用FuncOf函數(shù)建立新函數(shù)。這些技術(shù)在自訂HTTP路由器、實(shí)現(xiàn)高度可自訂的系統(tǒng)和建置可插拔的元件方面非常有用。

excel函數(shù)公式大全 excel函數(shù)公式大全 May 07, 2024 pm 12:04 PM

1. SUM函數(shù),用於對(duì)一列或一組單元格中的數(shù)字進(jìn)行求和,例如:=SUM(A1:J10)。 2、AVERAGE函數(shù),用於計(jì)算一列或一組儲(chǔ)存格中的數(shù)字的平均值,例如:=AVERAGE(A1:A10)。 3.COUNT函數(shù),用於計(jì)算一列或一組單元格中的數(shù)字或文字的數(shù)量,例如:=COUNT(A1:A10)4、IF函數(shù),用於根據(jù)指定的條件進(jìn)行邏輯判斷,並返回相應(yīng)的結(jié)果。

自訂 PHP 函數(shù)和預(yù)定義函數(shù)之間有什麼區(qū)別? 自訂 PHP 函數(shù)和預(yù)定義函數(shù)之間有什麼區(qū)別? Apr 22, 2024 pm 02:21 PM

自訂PHP函數(shù)與預(yù)定義函數(shù)的差異在於:作用域:自訂函數(shù)僅限於其定義範(fàn)圍,而預(yù)定義函數(shù)可在整個(gè)腳本中存取。定義方式:自訂函數(shù)使用function關(guān)鍵字定義,而預(yù)先定義函數(shù)則由PHP核心定義。參數(shù)傳遞:自訂函數(shù)接收參數(shù),而預(yù)先定義函數(shù)可能不需要參數(shù)。擴(kuò)充性:自訂函數(shù)可以根據(jù)需要?jiǎng)?chuàng)建,而預(yù)定義函數(shù)是內(nèi)建的且無(wú)法修改。

Golang 函數(shù)接收 map 參數(shù)時(shí)的注意事項(xiàng) Golang 函數(shù)接收 map 參數(shù)時(shí)的注意事項(xiàng) Jun 04, 2024 am 10:31 AM

在Go中傳遞map給函數(shù)時(shí),預(yù)設(shè)會(huì)建立副本,對(duì)副本的修改不影響原map。如果需要修改原始map,可透過(guò)指標(biāo)傳遞??誱ap需小心處理,因?yàn)榧夹g(shù)上是nil指針,傳遞空map給期望非空map的函數(shù)會(huì)發(fā)生錯(cuò)誤。

C++ 函數(shù)命名中參數(shù)順序的考慮 C++ 函數(shù)命名中參數(shù)順序的考慮 Apr 24, 2024 pm 04:21 PM

在C++函數(shù)命名中,考慮參數(shù)順序至關(guān)重要,可提高可讀性、減少錯(cuò)誤並促進(jìn)重構(gòu)。常見的參數(shù)順序約定包括:動(dòng)作-物件、物件-動(dòng)作、語(yǔ)意意義和遵循標(biāo)準(zhǔn)函式庫(kù)。最佳順序取決於函數(shù)目的、參數(shù)類型、潛在混淆和語(yǔ)言慣例。

C++ 函式異常進(jìn)階:客製化錯(cuò)誤處理 C++ 函式異常進(jìn)階:客製化錯(cuò)誤處理 May 01, 2024 pm 06:39 PM

C++中的異常處理可透過(guò)自訂異常類別增強(qiáng),提供特定錯(cuò)誤訊息、上下文資訊以及根據(jù)錯(cuò)誤類型執(zhí)行自訂操作。定義繼承自std::exception的異常類,提供特定的錯(cuò)誤訊息。使用throw關(guān)鍵字拋出自訂異常。在try-catch區(qū)塊中使用dynamic_cast將捕獲到的異常轉(zhuǎn)換為自訂異常類型。在實(shí)戰(zhàn)案例中,open_file函數(shù)會(huì)拋出FileNotFoundException異常,捕捉並處理該異??商峁└唧w的錯(cuò)誤訊息。

如何用 Golang 正規(guī)匹配多個(gè)單字或字串? 如何用 Golang 正規(guī)匹配多個(gè)單字或字串? May 31, 2024 am 10:32 AM

Golang正規(guī)表示式使用管道符|來(lái)匹配多個(gè)單字或字串,將各個(gè)選項(xiàng)作為邏輯OR表達(dá)式分隔開來(lái)。例如:匹配"fox"或"dog":fox|dog匹配"quick"、"brown"或"lazy":(quick|brown|lazy)匹配"Go"、"Python"或"Java":Go|Python |Java匹配字或4位郵遞區(qū)號(hào):([a-zA

如何在Java中寫出高效和可維護(hù)的函數(shù)? 如何在Java中寫出高效和可維護(hù)的函數(shù)? Apr 24, 2024 am 11:33 AM

編寫高效且可維護(hù)的Java函數(shù)的關(guān)鍵在於:保持簡(jiǎn)潔。使用有意義的命名。處理特殊情況。使用適當(dāng)?shù)目梢娦浴?/p>

See all articles