当前位置: 首页> 最新文章列表> PHP 中的 stristr 和正则表达式(preg_match)的区别是什么?

PHP 中的 stristr 和正则表达式(preg_match)的区别是什么?

gitbox 2025-06-22

一、stristr() 函数

stristr() 是 PHP 内置的字符串函数,它用于查找某个字符串在另一个字符串中首次出现的位置,并返回该位置及其后面的部分。stristr() 是不区分大小写的,即它会忽略字母的大小写差异。

语法:

<span><span><span class="hljs-title function_ invoke__">stristr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$before_needle</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $haystack:待搜索的字符串。

  • $needle:需要查找的子字符串。

  • $before_needle:如果设置为 true,则返回 needle 前面的部分,默认是返回 needle 后面的部分。

示例:

<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello World!"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stristr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">"world"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;  </span><span><span class="hljs-comment">// 输出 "World!"</span></span><span>
</span></span>

在这个例子中,stristr() 会忽略大小写,所以它能够匹配到 "world" 并返回 "World!"。

二、preg_match() 函数

preg_match() 是 PHP 中用于进行正则表达式匹配的函数,它可以根据提供的正则表达式来匹配字符串。与 stristr() 不同,preg_match() 允许使用强大的正则表达式规则来进行更复杂的匹配操作。该函数不仅支持大小写不敏感的匹配,还支持多种其他的匹配模式,如字符类、量词、边界条件等。

语法:

<span><span><span class="hljs-title function_ invoke__">preg_match</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">string</span></span><span> </span><span><span class="hljs-variable">$subject</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$matches</span></span><span> = </span><span><span class="hljs-literal">null</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">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $pattern:正则表达式模式。

  • $subject:待匹配的字符串。

  • $matches:如果匹配成功,返回匹配的结果。

  • $flags:标志位,控制匹配行为。

  • $offset:匹配的起始位置。

示例:

<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello World!"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">"/world/i"</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"匹配成功"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"匹配失败"</span></span><span>;
}
</span></span>

在这个例子中,preg_match() 使用正则表达式 /world/i 来匹配字符串 "Hello World!"。i 标志表示大小写不敏感,因此即使是 "world" 的大小写不同,也能够成功匹配。

三、stristr()preg_match() 的区别

  1. 功能复杂度

    • stristr() 是一个简单的字符串搜索函数,适用于简单的查找任务。它只需要两个参数:要查找的字符串和目标字符串。匹配规则非常简单,主要关注子字符串的查找,支持大小写不敏感。

    • preg_match() 则是一个功能更强大的函数,能够使用正则表达式进行复杂的匹配,可以处理更多样化的字符串匹配任务。你可以指定复杂的模式、字符类、量词等,更加灵活。

  2. 性能差异

    • 由于 stristr() 的功能较为简单,通常在性能上较 preg_match() 更优。特别是当只需要进行简单的子字符串查找时,stristr() 性能上更加高效。

    • preg_match() 需要解析正则表达式,进行更复杂的模式匹配,因此在性能上相对较慢,特别是在处理非常大的字符串或复杂的正则表达式时。

  3. 返回值的不同

    • stristr() 在找到匹配时返回目标字符串中从匹配位置到字符串末尾的部分。如果没有找到匹配,则返回 false

    • preg_match() 如果成功匹配,会返回 1,失败时返回 0,并且可以通过 $matches 参数返回更多的匹配信息(如匹配的子串、捕获的分组等)。

  4. 正则表达式的支持

    • stristr() 不支持正则表达式,匹配功能较为有限,只能执行简单的字符匹配。

    • preg_match() 支持完整的正则表达式,可以进行模式匹配、分组、反向引用等复杂的操作。

四、使用场景

  • stristr() 使用场景
    适用于简单的子字符串查找操作,特别是在你只需要查找某个固定的子字符串时。由于其性能较好,因此适用于性能要求较高的场景。

  • preg_match() 使用场景
    适用于复杂的模式匹配,尤其是当你需要使用正则表达式对字符串进行复杂的解析、验证或替换操作时。preg_match() 能够提供更多的匹配控制和灵活性。