首頁  >  文章  >  後端開發  >  PHP中全域正規表示式比對及比對數組元素(實例詳解)

PHP中全域正規表示式比對及比對數組元素(實例詳解)

WBOY
WBOY原創
2021-11-01 11:20:155809瀏覽

在之前的文章中為大家帶來了《讓人心動的PHP的正則表達式基礎(圖例詳解)》,其中給大家簡單的介紹了一下正則表達式中的一些基礎知識,本篇文章我們一起繼續來看正規表達式的一些常用函數,希望對大家有幫助!

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表示要搜尋的模式,也就是定義好的正規表示式;

    $subject
  • 表示要搜尋的字串;
$matches

表示可選參數是個多維數組,用來存放所有匹配的結果, 數組排序通過

$flags
    指定;
  • $offset

    表示可選參數,$offset<strong> 用於從目標字串中指定位置開始搜索,它的單位是位元組。 </strong>$flags表示可選參數,其中它可以結合下面幾個標記使用,

    #PREG_PATTERN_ORDER
  • <strong></strong>#結果排序為$matches[0] 保存完整模式的所有匹配,$matches[1] 保存第一個子組的所有匹配,以此類推。

PREG_SET_ORDER

#結果排序為$matches[0] 包含第一次匹配得到的所有匹配(包含子組), $matches[1] 是包含第二次匹配到的所有匹配(包含子組)的數組,以此類推。

PREG_OFFSET_CAPTURE

PHP中全域正規表示式比對及比對數組元素(實例詳解)

#如果這個標記被傳遞,每個發現的匹配返回時會增加它相對目標字串的偏移量。注意這會改變

$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 = &#39;/(def)(abc)/&#39;;
    $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 = &#39;/(def)(abc)/&#39;;
    $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(
        &#39;PHP中文网&#39;,
        &#39;http://www.php.cn/&#39;,
        &#39;php教程&#39;,
        &#39;abcdefg&#39;
    );
    $preg = &#39;/^[a-z]/&#39;;
    $preg_arr_1 = preg_grep($preg, $test_arr);
    $preg_arr_2 = preg_grep($preg, $test_arr, PREG_GREP_INVERT);
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    var_dump($preg_arr_1);
    var_dump($preg_arr_2);
?>

输出结果:

PHP中全域正規表示式比對及比對數組元素(實例詳解)

上述示例便是通过preg_grep() 函数匹配数组中的元素。

大家如果感兴趣的话,可以点击《PHP视频教程》、《正则表达式手册》进行更多关于PHP和正则表达式知识的学习。

以上是PHP中全域正規表示式比對及比對數組元素(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn