上午寫了一篇關于php過濾特殊字符并保留中文,數字以及英文字母的文章,其中就用到了php中的預設函數 preg_match_all(),今天就有小伙件發私信說,能不能簡單介紹一下這個 preg_match_all() 函數。查了一些資料,并寫成了這篇文章

php preg_match_all()函數介紹與用法

php preg_match_all() 函數

preg_match_all():用于執行一個全局正則表達式匹配。

語法:

int preg_match_all (pattern , subject ,matches,flags,offset);

參數:

pattern::要搜索的模式,字符串形式。

subject:輸入字符串。

matches:多維數組,作為輸出參數輸出所有匹配結果, 數組排序通過flags指定。

flags:數組結果排序,可以結合下面的幾個標記使用

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

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

3、PREG_OFFSET_CAPTURE: 如果這個標記被傳遞,每個發現的匹配返回時會增加它相對目標字符串的偏移量。

注意:PREG_PATTERN_ORDER 和 PREG_SET_ORDER 不能同時使用,如果沒有指定排序的標記,則默認為 PREG_PATTERN_ORDER

国产视频appoffset: 通常, 查找時從目標字符串的開始位置開始。(單位為字節)

返回值:

国产视频apppreg_match_all():返回完整匹配次數有可能為0,如果發生錯誤則返回false

php preg_match_all() 函數使用方法

例1:

查找html代碼中的所有p標簽,并輸出

<?php
//飛鳥慕魚博客
$html = "Name: <p>墨初</p> <br> Host: <p>http://xswdd.cn</p>";
$size = preg_match_all ("/<p>(.*)<\/p>/U", $html, $array);
//輸出匹配次數
echo $size;
//打印所以匹配到的結果
print_r($array);
?>

輸出結果:

2
Array
(
    [0] => Array
        (
            [0] => <p>墨初</p>
            [1] => <p>http://xswdd.cn</p>
        )
    [1] => Array
        (
            [0] => 墨初
            [1] => http://xswdd.cn
        )
)

注意:

国产视频app1、上面的示例中沒有指定了 preg_match_all() flags 參數,則默認為  PREG_PATTERN_ORDER

国产视频app2、輸出的 $array 數組中,$array[0]保存完整模式的所有匹配, $array[1] 保存第一個子組的所有匹配

例2:

<?php
//飛鳥慕魚博客
$html = "Name: <p>墨初 Mochu</p> <br> Host: <p>http://xswdd.cn</p>";
$size = preg_match_all ("/<p>(.*)<\/p>/U",$html,$array,PREG_SET_ORDER);
print_r($array);
?>

輸出結果:

Array
(
    [0] => Array
        (
            [0] => <p>墨初 Mochu</p>
            [1] => 墨初 Mochu
        )
    [1] => Array
        (
            [0] => <p>http://xswdd.cn</p>
            [1] => http://xswdd.cn
        )
)

注意:

1、上面的示例中指定了 preg_match_all() flags 參數值為 PREG_SET_ORDER 

2、輸出的 $array 數組中,第一個元素為第一次匹配到結果(包含子組),第二個元素為第二次匹配的結果(包含子組),以次類推

例3:

<?php
//飛鳥慕魚博客
$html = "Name: <p>墨初 Mochu</p> <br> Host: <p>http://xswdd.cn</p>";
$size = preg_match_all ("/<p>(.*)<\/p>/U",$html,$array,PREG_OFFSET_CAPTURE);
print_r($array);
?>

輸出結果:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => <p>墨初 Mochu</p>
                    [1] => 6
                )
            [1] => Array
                (
                    [0] => <p>http://xswdd.cn</p>
                    [1] => 37
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => 墨初 Mochu
                    [1] => 9
                )
            [1] => Array
                (
                    [0] => http://xswdd.cn
                    [1] => 40
                )
        )
)

注意:

1、上面的示例中指定了 preg_match_all() flags 參數值為 PREG_OFFSET_CAPTURE

2、輸出的 $array 數組中,會額外的增加匹配到的字符串相對于整個被處理字符串的偏移量