在之前的文章中為大家帶來了《讓人心動的PHP的正則表達式基礎(圖例詳解)》,其中給大家簡單的介紹了一下正則表達式中的一些基礎知識,本篇文章我們一起繼續來看正規表達式的一些常用函數,希望對大家有幫助!
在先前的文章中,我們介紹了正規表示式的一些基礎定義以及preg_match()
函數的基礎應用,使用正規表示式的主要目的就是為了透過簡單的辦法來實現強大的功能。為了簡單、有效而又不失強大,造成了正規表示式規則的複雜,建構正確、有效的正規表示式更是難度較大,所以只用一個preg_match()
函數不足以應付。
正規表示式是在處理文字資料時的一項重要而複雜的技術。而一些文字編輯器也使用正規表示式來實現高階的「搜尋/取代」功能。想要實現更多的功能就需要了解更多的函數,接下來我們就來看一下,正規表示式更多的函數知識吧。
<strong><span style="font-size: 18px;">preg_match_all()</span></strong><strong><span style="font-size: 18px;"></span></strong>
函數
##之前我們只介紹了
preg_match() 函數這一種基礎函數,在 PHP 中也有一個和
preg_match() 函數極為類似的函數——
preg_match_all()
preg_match_all($pattern, $subject [, &$matches [, $flags = PREG_PATTERN_ORDER [, $offset = 0 ]]])
<strong></strong>$pattern
表示要搜尋的模式,也就是定義好的正規表示式;
表示可選參數是個多維數組,用來存放所有匹配的結果, 數組排序通過
$flags表示可選參數,$offset<strong> 用於從目標字串中指定位置開始搜索,它的單位是位元組。 </strong>
$flags表示可選參數,其中它可以結合下面幾個標記使用,
<strong></strong>
#結果排序為$matches[0] 保存完整模式的所有匹配,$matches[1] 保存第一個子組的所有匹配,以此類推。
PREG_SET_ORDER
#結果排序為$matches[0] 包含第一次匹配得到的所有匹配(包含子組), $matches[1] 是包含第二次匹配到的所有匹配(包含子組)的數組,以此類推。
PREG_OFFSET_CAPTURE
#如果這個標記被傳遞,每個發現的匹配返回時會增加它相對目標字串的偏移量。注意這會改變$matches
中的每一個匹配結果字串元素,使其成為一個第0 個元素為匹配結果字串,第1 個元素為匹配結果字串在subject 中的偏移量。其中不能同時使用<strong> PREG_PATTERN_ORDER <span style="font-size: 18px;">和</span>PREG_SET_ORDER</strong>,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 class="brush:php;toolbar:false">"; 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_grep($pattern, $input [, $flags = 0 ])###其中需要注意的是:######
$pattern
表示要搜索的模式,也就是定义好的正则表达式;$input
表示要搜索的数组;$flags
表示可选参数,可以设置为 PREG_GREP_INVERT
,这时函数会返回数组中与给定模式 $pattern
不匹配的元素组成的数组。perg_grep() 函数将遍历 $input 数组中的每一个元素,让该元素与模式 $pattern 进行匹配,然后将匹配成功或者匹配失败的元素返回。
接下来,我们通过示例来看一下使用 perg_grep() 函数匹配数组中的元素,示例如下:
<?php $test_arr = array( 'PHP中文网', 'http://www.php.cn/', '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 class="brush:php;toolbar:false">'; var_dump($preg_arr_1); var_dump($preg_arr_2); ?>
输出结果:
上述示例便是通过preg_grep() 函数匹配数组中的元素。
大家如果感兴趣的话,可以点击《PHP视频教程》、《正则表达式手册》进行更多关于PHP和正则表达式知识的学习。
以上是PHP中全域正規表示式比對及比對數組元素(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!