php常用正則函數(shù)實例小結(jié)
本文實例總結(jié)了php常用正則函數(shù)。分享給大家供大家參考,具體如下:
1. mixed preg_replace(mixed pattern, mixed replacement, mixed subject, [, int limit])
函數(shù)功能:用于正則表達(dá)式的搜索和替換。
pattern:正則表達(dá)式。
replacement:替換的內(nèi)容。
subject:需要匹配替換的對象。
limit:可選,指定替換的個數(shù),如果省略 limit 或者其值為 -1,則所有的匹配項都會被替換。
補充說明
① replacement 可以包含 \\n 形式或 $n 形式的逆向引用,首選使用后者。每個此種引用將被替換為與第 n 個被捕獲的括號內(nèi)的子模式所匹配的文本。n 可以從 0 到 99,其中 \\0 或 $0 指的是被整個模式所匹配的文本。對左圓括號從左到右計數(shù)(從 1 開始)以取得子模式的數(shù)目。
② 對替換模式在一個逆向引用后面緊接著一個數(shù)字時(如 \\11),不能使用 \\ 符號來表示逆向引用。因為這樣將會使 preg_replace() 搞不清楚是想要一個 \\1 的逆向引用后面跟著一個數(shù)字 1 還是一個 \\11 的逆向引用。解決方法是使用 \${1}1。這會形成一個隔離的 $1 逆向引用,而使另一個 1 只是單純的文字。
③ 上述參數(shù)除 limit 外都可以是一個數(shù)組。如果 pattern 和 replacement 都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來進(jìn)行處理,這不一定和索引的數(shù)字順序相同。如果使用索引來標(biāo)識哪個 pattern 將被哪個 replacement 來替換,應(yīng)該在調(diào)用 preg_replace() 之前用 ksort() 函數(shù)對數(shù)組進(jìn)行排序。
例子 1 :
<?php $str = "The quick brown fox jumped over the lazy dog."; $str = preg_replace('/\s/','-',$str); echo $str; ?>
輸出結(jié)果為:
The-quick-brown-fox-jumped-over-the-lazy-dog.
例子 2 ,使用數(shù)組:
<?php $str = "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, $str); /*輸出: The bear black slow jumped over the lazy dog. */ ksort($replacements); print preg_replace($patterns, $replacements, $str); /*輸出: The slow black bear jumped over the lazy dog. */ ?>
例子 3 ,使用逆向引用:
<?php $str = '<a >baidu</a>其他字符<a ; $pattern = "/<a\s([\s\S]*?)>([\s\S]*?)<\/a>/i"; print preg_replace($pattern, '\\2', $str); ?>
輸出結(jié)果為:
baidu其他字符sohu
該例子演示了將文本中所有的 <a></a> 標(biāo)簽去掉。
2. int preg_match(string $pattern, string $subject [,array &$matches [, int $flags=0 [ ,int $offset=0]]])
函數(shù)功能:搜索subject與pattern給定的正則表達(dá)式的一個匹配。
pattern:要搜索的模式,字符串類型。
subject:輸入字符串。
matches:如果提供了參數(shù)matches,它將被填充為搜索結(jié)果,$matches[0]將包含完整模式匹配到文本,$matches[1]將包含第一捕獲子組匹配到的文本。
flags:可以設(shè)置為PREG_OFFSET_CAPTURE,如果傳遞了這個標(biāo)記,對于每一個出現(xiàn)的匹配返回時會附加字符串偏移量(相對于目標(biāo)字符串的)。
注意:這會改變填充到matches數(shù)組,使其每個元素成為一個由第0個元素是匹配到的字符串,第1個元素是該匹配字符串在目標(biāo)字符串subject中的偏移量。
offset:通常,搜索從目標(biāo)字符串的開始,可選參數(shù)offset用于指定從目標(biāo)字符串的某個未知開始搜索(單位是字節(jié))。
3. int preg_match_all(string $pattern, string $subject [, array &$matches [, int $flags=PREG_PATTERN_ORDER [, int $offset=0]]])
函數(shù)功能:搜索subject中所有匹配pattern給定正則表達(dá)式的匹配結(jié)果并且將它們以flag指定順序輸出到matches中。
在第一個匹配找到后,子序列繼續(xù)從最后一次匹配位置搜索。
pattern:要搜索的模式,字符串形式。
subject:輸入字符串。
matches:多維數(shù)組,作為輸出參數(shù)輸出后所有匹配結(jié)果,數(shù)組排序通過flags指定。
flags:可以結(jié)合下面標(biāo)記使用(注意不能同時使用PREG_PATTERN_ORDER和PREG_SET_ORDER):
PREG_PATTERN_ORDER
結(jié)果排序為$matches[0]保存完整模式的所有匹配,$matches[1] 保存第一個子組的所有匹配, 以此類推.
<?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=left>this is a test</div>", $out, PREG_PATTERN_ORDER); echo $out[0][0] . ", " . $out[0][1] . "\n"; echo $out[1][0] . ", " . $out[1][1] . "\n"; ?>
以上例程會輸出:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
因此, $out[0]是包含匹配完整模式的字符串的數(shù)組,$out[1]是包含閉合標(biāo)簽內(nèi)的字符串的數(shù)組.
PREG_SET_ORDER
結(jié)果排序為$matches[0]包含第一次匹配得到的所有匹配(包含子組),$matches[1]是包含第二次匹配到的所有匹配(包含子組)的數(shù)組, 以此類推.
<?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=\"left\">this is a test</div>", $out, PREG_SET_ORDER); echo $out[0][0] . ", " . $out[0][1] . "\n"; echo $out[1][0] . ", " . $out[1][1] . "\n"; ?>
以上例程會輸出:
<b>example: </b>, example:
<div align="left">this is a test</div>, this is a test
PREG_OFFSET_CAPTURE
如果這個標(biāo)記被傳遞, 每個發(fā)現(xiàn)的匹配返回時會增加它相對目標(biāo)字符串的偏移量. 注意這會改變matches中的每一個匹配結(jié)果字符串元素, 使其 成為一個第0個元素為匹配結(jié)果字符串, 第1個元素為 匹配結(jié)果字符串在subject中的偏移量.
如果沒有給定排序標(biāo)記, 假定設(shè)置為PREG_PATTERN_ORDER.
offset:通常,查找時從目標(biāo)字符串的開始位置開始,可選參數(shù)offset用于從目標(biāo)字符串中指定位置開始搜索(單位是字節(jié))。
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php正則表達(dá)式用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
- php中使用preg_match_all匹配文章中的圖片
- php preg_match_all結(jié)合str_replace替換內(nèi)容中所有img
- PHP中preg_match正則匹配中的/u、/i、/s含義
- PHP函數(shù)preg_match_all正則表達(dá)式的基本使用詳細(xì)解析
- PHP 正則表達(dá)式之正則處理函數(shù)小結(jié)(preg_match,preg_match_all,preg_replace,preg_split)
- PHP preg_match的匹配多國語言的技巧
- PHP preg match正則表達(dá)式函數(shù)的操作實例
- php中獲取指定IP的物理地址的代碼(正則表達(dá)式)
- PHP IPV6正則表達(dá)式驗證代碼
- PHP 正則表達(dá)式效率 貪婪、非貪婪與回溯分析(推薦)
- php正則修正符用法實例詳解
- php使用preg_match()函數(shù)驗證ip地址的方法
相關(guān)文章
PHP高級對象構(gòu)建 多個構(gòu)造函數(shù)的使用
構(gòu)建對象是PHP面向?qū)ο缶幊淘O(shè)計中的一個重要主題。在最簡單的情況下,普通構(gòu)造函數(shù)就夠用了,但如果要開展更為復(fù)雜的設(shè)計,那么構(gòu)造函數(shù)可能會變的難以管理2012-02-02