preg_grep 是 PHP 中一个非常有用的函数,它能够根据正则表达式过滤和匹配数组中的元素。如果你有一个数组,并且想要过滤出符合某个正则表达式规则的元素,preg_grep 就是一个非常高效的选择。
本篇文章将详细介绍 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_INVERT 和 PREG_GREP_ARRAY.
preg_grep 会返回一个新的数组,包含所有匹配正则表达式的元素。如果没有元素匹配正则表达式,则返回一个空数组。
假设我们有一个包含若干字符串的数组,我们想要筛选出所有包含数字的字符串,可以使用 preg_grep 函数配合正则表达式来实现。
<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>
输出:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => apple123
[</span><span><span class="hljs-meta">2</span></span><span>] => cherry45
)
</span></span>
在这个例子中,preg_grep 函数返回了包含数字的两个字符串。
如果你希望获取不符合正则表达式的元素,可以使用 PREG_GREP_INVERT 标志。这样,函数会返回那些没有匹配正则表达式的元素。
<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>
输出:
<span><span>Array
(
[</span><span><span class="hljs-meta">1</span></span><span>] => banana
[</span><span><span class="hljs-meta">3</span></span><span>] => date
)
</span></span>
通过 PREG_GREP_INVERT,返回的是不包含数字的字符串。
如果你希望返回的结果保留数组的键,可以使用 PREG_GREP_ARRAY 标志。这对于需要保留原始数组索引时非常有用。
<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>
输出:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => apple123
[</span><span><span class="hljs-meta">2</span></span><span>] => cherry45
)
</span></span>
这样,返回的数组中将包含原始数组的键。
如果你希望对数组中的元素应用多个正则规则,可以将多个正则表达式结合起来使用。
例如,我们可以先匹配所有包含数字的元素,然后再匹配长度超过 6 的字符串。
<span><span><span class="hljs-meta"><?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">?></span></span><span>
</span></span>
输出:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => apple123
[</span><span><span class="hljs-meta">4</span></span><span>] => watermelon321
)
</span></span>
在这个例子中,先筛选出包含数字的元素,再对结果进行第二次筛选,找出那些长度大于 6 的字符串。
preg_grep 是一个非常强大的函数,适用于根据正则表达式来过滤数组中的元素。通过合理使用它的正则表达式和标志选项,你可以轻松实现各种复杂的匹配和过滤需求。希望本文的介绍能够帮助你更好地掌握 preg_grep 的使用方法,提升你在 PHP 编程中的效率。