




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、如何在PHP中使用正則表達(dá)式進(jìn)行查找替換1. preg_match 執(zhí)行一個(gè)正則表達(dá)式匹配int preg_match ( string $pattern , string $subject , array &$matches , int $flags = 0 , int $offset = 0 )搜索subject與pattern給定的正則表達(dá)式的一個(gè)匹配. pattern:要搜索的模式,字符串類型。subject :輸入字符串。 matches:如果提供了參數(shù)matches,它將被填充為搜索結(jié)果。 $matches0將包含完整模式匹配到的文本, $matches1將包含第一個(gè)捕獲子
2、組匹配到的文本,以此類推。flags:flags可以被設(shè)置為以下標(biāo)記值:PREG_OFFSET_CAPTURE 如果傳遞了這個(gè)標(biāo)記,對(duì)于每一個(gè)出現(xiàn)的匹配返回時(shí)會(huì)附加字符串偏移量(相對(duì)于目標(biāo)字符串的)。 注意:這會(huì)改變填充到matches參數(shù)的數(shù)組,使其每個(gè)元素成為一個(gè)由 第0個(gè)元素是匹配到的字符串,第1個(gè)元素是該匹配字符串 在目標(biāo)字符串subject中的偏移量。offset:通常,搜索從目標(biāo)字符串的開始位置開始??蛇x參數(shù) offset 用于 指定從目標(biāo)字符串的某個(gè)未知開始搜索(單位是字節(jié))。返回值:preg_match()返回 pattern 的匹配次數(shù)。 它的值將是0次(不匹配)或1次,因?yàn)?/p>
3、 preg_match()在第一次匹配后 將會(huì)停止搜索。 preg_match_all()不同于此,它會(huì)一直搜索subject直到到達(dá)結(jié)尾。 如果發(fā)生錯(cuò)誤 preg_match()返回 FALSE。示例:復(fù)制代碼 代碼如下:<?php/*模式分隔符后的"i"標(biāo)記這是一個(gè)大小寫不敏感的搜索*將會(huì)輸出:1*/echo preg_match("/,s*(php)/i", "In my point, PHP is the web scripting language of choice.");echo "<br/>
4、"."n"/*將會(huì)輸出:Array(0=>, PHP 1=>PHP) */$matches = array();preg_match("/,s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches);print_r($matches);echo "<br/>"."n"/*將會(huì)輸出:Array(0=>Array(0=>, PH
5、P 1=>11) 1=>Array(0=>PHP 1=>13) */preg_match("/,s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_OFFSET_CAPTURE);print_r($matches);echo "<br/>"."n"/*將會(huì)輸出:Array(0=>Array(0=>e php 1=63) 1=
6、>Array(0=>php 1=>65) */preg_match("/,a-z?s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_OFFSET_CAPTURE, 28);print_r($matches);echo "<br/>"."n"?> 2.preg_match_all 執(zhí)行一個(gè)全局正則表達(dá)式匹配int preg_match_
7、all ( string $pattern , string $subject , array &$matches , int $flags = PREG_PATTERN_ORDER , int $offset = 0 )搜索subject中所有匹配pattern給定正則表達(dá)式 的匹配結(jié)果并且將它們以flag指定順序輸出到matches中. 在第一個(gè)匹配找到后, 子序列繼續(xù)從最后一次匹配位置搜索.pattern:要搜索的模式,字符串形式。subject :輸入字符串。 matches:多維數(shù)組,作為輸出參數(shù)輸出所有匹配結(jié)果, 數(shù)組排序通過flags指定。flags:可以結(jié)合下面標(biāo)記使用
8、(注意不能同時(shí)使用PREG_PATTERN_ORDER和PREG_SET_ORDER),如果沒有給定排序標(biāo)記,假定設(shè)置為PREG_PATTERN_ORDER:PREG_PATTERN_ORDER:結(jié)果排序?yàn)?matches0保存完整模式的所有匹配, $matches1保存第一個(gè)子組的所有匹配,以此類推。PREG_SET_ORDER:結(jié)果排序?yàn)?matches0包含第一次匹配得到的所有匹配(包含子組), $matches1是包含第二次匹配到的所有匹配(包含子組)的數(shù)組,以此類推。PREG_OFFSET_CAPTURE:如果這個(gè)標(biāo)記被傳遞,每個(gè)發(fā)現(xiàn)的匹配返回時(shí)會(huì)增加它相對(duì)目標(biāo)字符串的偏移量。 注意
9、這會(huì)改變matches中的每一個(gè)匹配結(jié)果字符串元素,使其 成為一個(gè)第0個(gè)元素為 匹配結(jié)果字符串,第1個(gè)元素為 匹配結(jié)果字符串在subject中的偏移量。返回值:返回完整匹配次數(shù)(可能是0),或者如果發(fā)生錯(cuò)誤返回FALSE。示例:復(fù)制代碼 代碼如下:<?php/*將會(huì)輸出:2*/echo preg_match_all("/php/i", "In my point, PHP is the web scripting language of choice. I love php", $matches);echo "<br/>&quo
10、t;."n"/*將會(huì)輸出:Array(0=>, PHP 1=>PHP) */$matches = array();preg_match("/,a-z?s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches);print_r($matches);echo "<br/>"."n"/*將會(huì)輸出:Array(0=>Array(0=>, PH
11、P 1=>e php) 1=>Array(0=>PHP 1=>php) */$matches = array();preg_match_all("/,a-z?s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_PATTERN_ORDER);print_r($matches);echo "<br/>"."n"/*將會(huì)輸出:Array(0=
12、>Array(0=>Array(0=>, PHP 1=>11) 1=>Array(0=>PHP 1=>13) 1=>Array(0=>Array(0=>e php 1=>63) 1=>Array(0=>php 1=>65)*/$matches = array();preg_match_all("/,a-z?s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php",
13、$matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE);print_r($matches);echo "<br/>"."n"/*Array(0=>Array(0=>e php 1=>63) 1=>Array(0=>php 1=>65)*/$matches = array();preg_match_all("/,a-z?s*(php)/i", "In my point, PHP is the web scripting language of
14、choice. I love php", $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE, 28);print_r($matches);echo "<br/>"."n"?> 3.preg_split 通過一個(gè)正則表達(dá)式分隔字符串a(chǎn)rray preg_split ( string $pattern , string $subject , int $limit = -1 , int $flags = 0 )通過一個(gè)正則表達(dá)式分隔給定字符串. pattern:用于搜索的模式,字符串形式。su
15、bject:輸入字符串 limit:如果指定,將限制分隔得到的子串最多只有l(wèi)imit個(gè),返回的最后一個(gè) 子串將包含所有剩余部分。limit值為-1, 0或null時(shí)都代表"不限制", 作為php的標(biāo)準(zhǔn),你可以使用null跳過對(duì)flags的設(shè)置。flags:flags 可以是任何下面標(biāo)記的組合(以位或運(yùn)算 | 組合):PREG_SPLIT_NO_EMPTY:如果這個(gè)標(biāo)記被設(shè)置, preg_split() 將進(jìn)返回分隔后的非空部分。 PREG_SPLIT_DELIM_CAPTURE:如果這個(gè)標(biāo)記設(shè)置了,用于分隔的模式中的括號(hào)表達(dá)式將被捕獲并返回。 PREG_SPLIT_OFFS
16、ET_CAPTURE:如果這個(gè)標(biāo)記被設(shè)置, 對(duì)于每一個(gè)出現(xiàn)的匹配返回時(shí)將會(huì)附加字符串偏移量. 注意:這將會(huì)改變返回?cái)?shù)組中的每一個(gè)元素, 使其每個(gè)元素成為一個(gè)由第0個(gè)元素為分隔后的子串,第1個(gè)元素為該子串在subject中的偏移量組成的數(shù)組。返回值:返回一個(gè)使用 pattern 邊界分隔 subject 后得到 的子串組成的數(shù)組。示例:復(fù)制代碼 代碼如下:<?php/*將會(huì)輸出:*Array ( 0 => In my point, 1 => is the web scripting language of choice. I love 2 => ) */$matches
17、= array();print_r(preg_split("/php/i", "In my point, PHP is the web scripting language of choice. I love php");echo "<br/>"."n"/*將會(huì)輸出:*Array ( 0 => In my point, 1 => is the web scripting language of choice. I love php ) */$matches = array();print_r
18、(preg_split("/php/i", "In my point, PHP is the web scripting language of choice. I love php", 2);echo "<br/>"."n"/*將會(huì)輸出:*Array ( 0 => In my point, 1 => is the web scripting language of choice. I love ) */$matches = array();print_r(preg_split("
19、/php/i", "In my point, PHP is the web scripting language of choice. I love php", -1, PREG_SPLIT_NO_EMPTY);echo "<br/>"."n"?> 4.preg_quote 轉(zhuǎn)義正則表達(dá)式字符 string preg_quote ( string $str , string $delimiter = NULL )preg_quote()需要參數(shù) str 并向其中 每個(gè)正則表達(dá)式語法中的字符前增加一個(gè)反斜線。
20、 這通常用于你有一些運(yùn)行時(shí)字符串 需要作為正則表達(dá)式進(jìn)行匹配的時(shí)候。 正則表達(dá)式特殊字符有: . + * ? $ ( ) = ! < > | : - str:輸入字符串delimiter:如果指定了可選參數(shù) delimiter,它也會(huì)被轉(zhuǎn)義。這通常用于 轉(zhuǎn)義PCRE函數(shù)使用的分隔符。 /是最通用的分隔符。返回值:返回轉(zhuǎn)義后的字符串。 示例:復(fù)制代碼 代碼如下:<?php/在這個(gè)例子中,preg_quote($word) 用于保持星號(hào)原文涵義,使其不使用正則表達(dá)式中的特殊語義。$textbody = "This book is *very* difficult to
21、find."$word = "*very*"$textbody = preg_replace ("/" . preg_quote($word) . "/", "<i>" . $word . "</i>", $textbody);/將會(huì)輸出This book is <i>*very*</i> difficult to find. echo htmlspecialchars($textbody);?> 5.preg_grep 返回匹配模
22、式的數(shù)組條目 array preg_grep ( string $pattern , array $input , int $flags = 0 )返回給定數(shù)組input中與模式pattern匹配的元素組成的數(shù)組. pattern:要搜索的模式, 字符串形式. input:輸入數(shù)組. flags:如果設(shè)置為PREG_GREP_INVERT, 這個(gè)函數(shù)返回輸入數(shù)組中與 給定模式pattern不匹配的元素組成的數(shù)組.返回值:返回使用input中key做索引的數(shù)組.示例:復(fù)制代碼 代碼如下:<?php$array = array("abc", "dd",
23、 "123", "123.22", "word123", "33.2", "0.22");/返回所有包含浮點(diǎn)數(shù)的元素/輸出:Array ( 3 => 123.22 5 => 33.2 6 => 0.22 ) $fl_array = preg_grep("/(d+)?.d+$/", $array);print_r($fl_array);/返回所有包含浮點(diǎn)數(shù)的元素/輸出:Array ( 0 => abc 1 => dd 2 => 123 4 =
24、> word123 ) $fl_array = preg_grep("/(d+)?.d+$/", $array, PREG_GREP_INVERT);print_r($fl_array);?>6.preg_replace 執(zhí)行一個(gè)正則表達(dá)式的搜索和替換mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject , int $limit = -1 , int &$count )搜索subject中匹配pattern的部分, 以replacement進(jìn)行替換。patter
25、n:要搜索的模式??梢允且粋€(gè)字符串或字符串?dāng)?shù)組。 可以使用一些PCRE修飾符, 包括'e'(PREG_REPLACE_EVAL),可以為這個(gè)函數(shù)指定。replacement:用于替換的字符串或字符串?dāng)?shù)組。如果這個(gè)參數(shù)是一個(gè)字符串,并且pattern是一個(gè)數(shù)組,那么所有的模式都使用這個(gè)字符串進(jìn)行替換。如果pattern和replacement都是數(shù)組,每個(gè)pattern使用replacement中對(duì)應(yīng)的 元素進(jìn)行替換。如果replacement中的元素比pattern中的少, 多出來的pattern使用空字符串進(jìn)行替換。replacement中可以包含后向引用n或(php 4.0
26、.4以上可用)$n,語法上首選后者。 每個(gè) 這樣的引用將被匹配到的第n個(gè)捕獲子組捕獲到的文本替換。 n可以是0-99,0和$0代表完整的模式匹配文本。 捕獲子組的序號(hào)計(jì)數(shù)方式為:代表捕獲子組的左括號(hào)從左到右, 從1開始數(shù)。如果要在replacement中使用反斜線,必須使用4個(gè)("",譯注:因?yàn)檫@首先是php的字符串,經(jīng)過轉(zhuǎn)義后,是兩個(gè),再經(jīng)過 正則表達(dá)式引擎后才被認(rèn)為是一個(gè)原文反斜線)。當(dāng)在替換模式下工作并且后向引用后面緊跟著需要是另外一個(gè)數(shù)字(比如:在一個(gè)匹配模式后緊接著增加一個(gè)原文數(shù)字), 不能使用1這樣的語法來描述后向引用。比如, 11將會(huì)使 preg_replac
27、e()不能理解你希望的是一個(gè)1后向引用緊跟一個(gè)原文1,還是 一個(gè)11后向引用后面不跟任何東西。 這種情況下解決方案是使用$11。這創(chuàng)建了一個(gè)獨(dú)立的$1后向引用, 一個(gè)獨(dú)立的原文1。 當(dāng)使用e修飾符時(shí), 這個(gè)函數(shù)會(huì)轉(zhuǎn)義一些字符(即:'、"、 和 NULL) 然后進(jìn)行后向引用替換。當(dāng)這些完成后請(qǐng)確保后向引用解析完后沒有單引號(hào)或 雙引號(hào)引起的語法錯(cuò)誤(比如: 'strlen('$1')+strlen("$2")')。確保符合PHP的 字符串語法,并且符合eval語法。因?yàn)樵谕瓿商鎿Q后,引擎會(huì)將結(jié)果字符串作為php代碼使用eval方
28、式進(jìn)行評(píng)估并將返回值作為最終參與替換的字符串。subject:要進(jìn)行搜索和替換的字符串或字符串?dāng)?shù)組。 如果subject是一個(gè)數(shù)組,搜索和替換回在subject的每一個(gè)元素上進(jìn)行, 并且返回值也會(huì)是一個(gè)數(shù)組。limit:每個(gè)模式在每個(gè)subject上進(jìn)行替換的最大次數(shù)。默認(rèn)是 -1(無限)。count:如果指定,將會(huì)被填充為完成的替換次數(shù)。返回值:如果subject是一個(gè)數(shù)組, preg_replace()返回一個(gè)數(shù)組, 其他情況下返回一個(gè)字符串。 如果匹配被查找到,替換后的subject被返回,其他情況下 返回沒有改變的 subject。如果發(fā)生錯(cuò)誤,返回 NULL 。 示例:使用后向引用緊
29、跟數(shù)值原文:復(fù)制代碼 代碼如下:<?php$string = 'April 15, 2003'/*w+字符重復(fù)一次或者多次*d+數(shù)字重復(fù)一次或者多次*i忽略大小寫*/$pattern = '/(w+) (d+), (d+)/i'/*$0 完整的模式匹配文本*$11 第一個(gè)小括號(hào)中的模式匹配文本并且在后面加1*3 第三個(gè)小括號(hào)中的模式匹配文本*/$replacement = '$0:<br/> $11,3'echo preg_replace($pattern, $replacement, $string);?>preg_re
30、place()中使用基于索引的數(shù)組:復(fù)制代碼 代碼如下:$string = 'The quick brown fox jumped over the lazy dog.'$patterns = array();$patterns0 = '/quick/'$patterns1 = '/brown/'$patterns2 = '/fox/'$replacements = array();$replacements2 = 'bear'$replacements1 = 'black'$replacement
31、s0 = 'slow'/會(huì)輸出:The bear black slow jumped over the lazy dog.echo preg_replace($patterns, $replacements, $string);/對(duì)模式和替換內(nèi)容按key進(jìn)行排序我們可以得到期望的結(jié)果.ksort($patterns);ksort($replacements);/會(huì)輸出:The slow black bear jumped over the lazy dog.echo preg_replace($patterns, $replacements, $string);替換一些值:復(fù)制
32、代碼 代碼如下:<?php$patterns = array ('/(19|20)(d2)-(d1,2)-(d1,2)/','/s*(w+)s*=/');$replace = array ('3/4/12', '$1 =');echo preg_replace($patterns, $replace, 'startDate = 1999-5-27');?> 使用修飾符'e':復(fù)制代碼 代碼如下:<?php$html_body = "<p><span>
33、;hello</span></p>"/會(huì)輸出:<P><SPAN>hello</SPAN></P> echo htmlspecialchars(preg_replace("/(</?)(w+)(>*>)/e", "'1'.strtoupper('2').'3'", $html_body);?>剝離空白字符:復(fù)制代碼 代碼如下:<?php$str = 'foo o'$str = pre
34、g_replace('/ss+/', ' ', $str);/ 將會(huì)改變?yōu)?#39;foo o'echo $str;?> 使用參數(shù)count: 復(fù)制代碼 代碼如下:<?php$count = 0;echo preg_replace(array('/d/', '/s/'), '*', 'xp 4 to', -1 , $count);/等價(jià)于echo preg_replace('/d|s/', '', 'xp 4 to', -1 , $count);echo $count; /3?> 7.preg_replace_callback 執(zhí)行一個(gè)正則表達(dá)式搜索并且使用一個(gè)回調(diào)進(jìn)行替換 mixed preg_replace_callback ( mixed
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外檐保溫合同范本
- 廠房全租合同范本
- 勞務(wù)派遣合同范本南京
- 農(nóng)村煙酒供應(yīng)合同范本
- 臺(tái)歷打孔合同范本
- 出售舊鋼骨架合同范本
- 前期物業(yè)管理合同范例
- 單位購買二手房合同范本
- 發(fā)票增額購銷合同范例
- 合股經(jīng)營學(xué)校合同范本
- Unit 5 Now and Then-Lesson 3 First-Time Experiences 說課稿 2024-2025學(xué)年北師大版(2024)七年級(jí)英語下冊(cè)
- 2025年廣州市黃埔區(qū)東區(qū)街招考社區(qū)居委會(huì)專職工作人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《中國心力衰竭診斷和治療指南2024》解讀
- 2025中國人民保險(xiǎn)集團(tuán)校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 中國食物成分表2020年權(quán)威完整改進(jìn)版
- 伊斯蘭法 外國法制史 教學(xué)課課件
- 汽車維修保養(yǎng)服務(wù)項(xiàng)目投標(biāo)文件
- 增額終身壽險(xiǎn)的購買理由
- 【MOOC】影視鑒賞-揚(yáng)州大學(xué) 中國大學(xué)慕課MOOC答案
- 智研咨詢發(fā)布:2025年中國商用密碼行業(yè)市場(chǎng)現(xiàn)狀、發(fā)展概況、未來前景分析報(bào)告
- 《氫科學(xué)技術(shù)應(yīng)用》課件-3-1 氫氣的儲(chǔ)存
評(píng)論
0/150
提交評(píng)論