當前位置: 首頁> 最新文章列表> preg_grep函數怎麼用來過濾並匹配符合正則表達式的數組元素?詳細步驟解析

preg_grep函數怎麼用來過濾並匹配符合正則表達式的數組元素?詳細步驟解析

gitbox 2025-06-19

preg_grep是PHP 中一個非常有用的函數,它能夠根據正則表達式過濾和匹配數組中的元素。如果你有一個數組,並且想要過濾出符合某個正則表達式規則的元素, preg_grep就是一個非常高效的選擇。

本篇文章將詳細介紹preg_grep函數的用法,並通過具體的示例來幫助大家更好地理解它的功能。

1. preg_grep 函數的基本語法

<span><span><span class="hljs-title function_ invoke__">preg_grep</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$flags</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $pattern :這是一個正則表達式,PHP 會根據這個正則來匹配數組中的元素。

  • $input :需要過濾的數組。

  • $flags :可選的標誌參數,決定了返回的數組類型。常用的標誌有PREG_GREP_INVERTPREG_GREP_ARRAY .

2. preg_grep 函數的返回值

preg_grep會返回一個新的數組,包含所有匹配正則表達式的元素。如果沒有元素匹配正則表達式,則返回一個空數組。

3. 使用示例

3.1 基本用法

假設我們有一個包含若干字符串的數組,我們想要篩選出所有包含數字的字符串,可以使用preg_grep函數配合正則表達式來實現。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$input</span></span><span> = [</span><span><span class="hljs-string">"apple123"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry45"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>];

</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\d+/'</span></span><span>; </span><span><span class="hljs-comment">// 匹配包含數字的字符串</span></span><span>

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_grep</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$input</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; apple123
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; cherry45
)
</span></span>

在這個例子中, preg_grep函數返回了包含數字的兩個字符串。

3.2 使用PREG_GREP_INVERT 標誌反向過濾

如果你希望獲取不符合正則表達式的元素,可以使用PREG_GREP_INVERT標誌。這樣,函數會返回那些沒有匹配正則表達式的元素。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$input</span></span><span> = [</span><span><span class="hljs-string">"apple123"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry45"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>];

</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\d+/'</span></span><span>; </span><span><span class="hljs-comment">// 匹配包含數字的字符串</span></span><span>

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_grep</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$input</span></span><span>, PREG_GREP_INVERT);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; banana
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; date
)
</span></span>

通過PREG_GREP_INVERT ,返回的是不包含數字的字符串。

3.3 使用PREG_GREP_ARRAY 標誌獲取數組的鍵

如果你希望返回的結果保留數組的鍵,可以使用PREG_GREP_ARRAY標誌。這對於需要保留原始數組索引時非常有用。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$input</span></span><span> = [</span><span><span class="hljs-string">"apple123"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry45"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>];

</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\d+/'</span></span><span>; </span><span><span class="hljs-comment">// 匹配包含數字的字符串</span></span><span>

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_grep</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$input</span></span><span>, PREG_GREP_ARRAY);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; apple123
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; cherry45
)
</span></span>

這樣,返回的數組中將包含原始數組的鍵。

4. 進階用法:多種正則匹配

如果你希望對數組中的元素應用多個正則規則,可以將多個正則表達式結合起來使用。

例如,我們可以先匹配所有包含數字的元素,然後再匹配長度超過6 的字符串。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$input</span></span><span> = [</span><span><span class="hljs-string">"apple123"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry45"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>, </span><span><span class="hljs-string">"watermelon321"</span></span><span>];

</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\d+/'</span></span><span>; </span><span><span class="hljs-comment">// 匹配包含數字的字符串</span></span><span>

</span><span><span class="hljs-comment">// 使用 preg_grep 篩選出包含數字的元素</span></span><span>
</span><span><span class="hljs-variable">$matched</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_grep</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$input</span></span><span>);

</span><span><span class="hljs-comment">// 篩選出長度大於6的元素</span></span><span>
</span><span><span class="hljs-variable">$long_words</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_grep</span></span><span>(</span><span><span class="hljs-string">'/^.{7,}$/'</span></span><span>, </span><span><span class="hljs-variable">$matched</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$long_words</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; apple123
    [</span><span><span class="hljs-meta">4</span></span><span>] =&gt; watermelon321
)
</span></span>

在這個例子中,先篩選出包含數字的元素,再對結果進行第二次篩選,找出那些長度大於6 的字符串。

5. 總結

preg_grep是一個非常強大的函數,適用於根據正則表達式來過濾數組中的元素。通過合理使用它的正則表達式和標誌選項,你可以輕鬆實現各種複雜的匹配和過濾需求。希望本文的介紹能夠幫助你更好地掌握preg_grep的使用方法,提升你在PHP 編程中的效率。