您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用PHP中全局正則表達式匹配及匹配數組元素”,在日常操作中,相信很多人在怎么使用PHP中全局正則表達式匹配及匹配數組元素問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用PHP中全局正則表達式匹配及匹配數組元素”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
preg_match_all()
函數
之前我們只介紹了preg_match()
函數這一種基礎函數,在 PHP 中還有一個和 preg_match()
函數極為類似的函數——preg_match_all()
,該函數可以搜索字符串中所有可以和正則表達式匹配的結果。
該函數的語法格式如下:
preg_match_all($pattern, $subject [, &$matches [, $flags = PREG_PATTERN_ORDER [, $offset = 0 ]]])
其中需要注意的是:
$pattern
表示要搜索的模式,也就是定義好的正則表達式;$subject
表示要搜索的字符串;$matches
表示可選參數是個多維數組,用來存放所有匹配的結果, 數組排序通過 $flags
指定;$offset
表示可選參數,$offset
用于從目標字符串中指定位置開始搜索,它的單位是字節。
$flags表示可選參數,其中它可以結合下面幾個標記使用,
PREG_PATTERN_ORDER
結果排序為 $matches[0] 保存完整模式的所有匹配,$matches[1] 保存第一個子組的所有匹配,以此類推。
PREG_SET_ORDER
結果排序為 $matches[0] 包含第一次匹配得到的所有匹配(包含子組), $matches[1] 是包含第二次匹配到的所有匹配(包含子組)的數組,以此類推。
PREG_OFFSET_CAPTURE
如果這個標記被傳遞,每個發現的匹配返回時會增加它相對目標字符串的偏移量。注意這會改變 $matches
中的每一個匹配結果字符串元素,使其成為一個第 0 個元素為匹配結果字符串,第 1 個元素為匹配結果字符串在 subject 中的偏移量。
其中不能同時使用 PREG_PATTERN_ORDER
和 PREG_SET_ORDER
,preg_match_all() 函數可以返回 $pattern 的匹配次數(可能是 0),如果發生錯誤則返回 FALSE
。
接下來我們通過示例來看一下preg_match_all() 函數的應用,匹配一個字符串,示例如下:
<?php $subject = "abcdefghijkdefabcedfdefxyzdef"; $pattern_1 = '/(def)(abc)/'; $num_1 = preg_match_all($pattern_1, $subject, $matches_1,PREG_PATTERN_ORDER); echo "<pre>"; var_dump($matches_1); var_dump($num_1); $pattern_2 = '/(def)(abc)/'; $num_2 = preg_match_all($pattern_2, $subject, $matches_2,PREG_OFFSET_CAPTURE, 3); var_dump($matches_2); var_dump($num_2); ?>
輸出結果:
由上述示例中,我們便完成了通過preg_match_all() 函數來匹配一個字符串。通過preg_match_all() 函數的應用,可以完成全局正則表達式匹配。
那接下來那我們看一下怎樣完成檢測與給定模式匹配的數組元素。這時候就要用到preg_grep() 函數了。
preg_grep()
函數
使用正則表達式除了可以匹配字符串外,還可以匹配數組中的元素。PHP 中的 preg_grep() 函數可以搜索數組中的所有元素,并返回與正則表達式匹配的所有元素所組成的數組。該函數的語法格式如下:
preg_grep($pattern, $input [, $flags = 0 ])
其中需要注意的是:
$pattern
表示要搜索的模式,也就是定義好的正則表達式;$input
表示要搜索的數組;$flags
表示可選參數,可以設置為 PREG_GREP_INVERT
,這時函數會返回數組中與給定模式 $pattern
不匹配的元素組成的數組。perg_grep() 函數將遍歷 $input 數組中的每一個元素,讓該元素與模式 $pattern 進行匹配,然后將匹配成功或者匹配失敗的元素返回。
接下來,我們通過示例來看一下使用 perg_grep() 函數匹配數組中的元素,示例如下:
<?php $test_arr = array( '億速云', 'http://www.5655pk.com/', 'php教程', 'abcdefg' ); $preg = '/^[a-z]/'; $preg_arr_1 = preg_grep($preg, $test_arr); $preg_arr_2 = preg_grep($preg, $test_arr, PREG_GREP_INVERT); echo '<pre>'; var_dump($preg_arr_1); var_dump($preg_arr_2); ?>
輸出結果:
上述示例便是通過preg_grep() 函數匹配數組中的元素。
到此,關于“怎么使用PHP中全局正則表達式匹配及匹配數組元素”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。