php如何检测指定字符串中是否包含另一个字符串

发布时间:2022-09-05 09:54:40 作者:iii
来源:亿速云 阅读:611

PHP如何检测指定字符串中是否包含另一个字符串

在PHP开发中,字符串操作是非常常见的任务之一。检测一个字符串中是否包含另一个字符串是字符串处理中的基础操作之一。本文将详细介绍如何在PHP中检测指定字符串中是否包含另一个字符串,并探讨多种实现方式及其适用场景。

1. 使用 strpos() 函数

strpos() 是PHP中最常用的字符串查找函数之一。它用于查找字符串中首次出现指定子字符串的位置。如果找到子字符串,则返回其在主字符串中的起始位置(从0开始);如果未找到,则返回 false

语法

strpos(string $haystack, string $needle, int $offset = 0): int|false

示例

$haystack = "Hello, world!";
$needle = "world";

if (strpos($haystack, $needle) !== false) {
    echo "包含 'world'";
} else {
    echo "不包含 'world'";
}

注意事项

2. 使用 strstr() 函数

strstr() 函数用于查找字符串中首次出现指定子字符串的位置,并返回从该位置到字符串末尾的部分。如果未找到子字符串,则返回 false

语法

strstr(string $haystack, string $needle, bool $before_needle = false): string|false

示例

$haystack = "Hello, world!";
$needle = "world";

if (strstr($haystack, $needle) {
    echo "包含 'world'";
} else {
    echo "不包含 'world'";
}

注意事项

3. 使用 str_contains() 函数(PHP 8.0+)

从PHP 8.0开始,引入了 str_contains() 函数,专门用于检测字符串中是否包含另一个字符串。这个函数更加直观和简洁。

语法

str_contains(string $haystack, string $needle): bool

示例

$haystack = "Hello, world!";
$needle = "world";

if (str_contains($haystack, $needle)) {
    echo "包含 'world'";
} else {
    echo "不包含 'world'";
}

注意事项

4. 使用正则表达式 preg_match()

如果需要更复杂的字符串匹配,可以使用正则表达式。preg_match() 函数用于执行正则表达式匹配。

语法

preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int|false

示例

$haystack = "Hello, world!";
$needle = "/world/";

if (preg_match($needle, $haystack)) {
    echo "包含 'world'";
} else {
    echo "不包含 'world'";
}

注意事项

5. 使用 mb_strpos() 函数(多字节字符串)

在处理多字节字符(如中文、日文等)时,strpos() 可能无法正常工作。此时可以使用 mb_strpos() 函数,它是 strpos() 的多字节版本。

语法

mb_strpos(string $haystack, string $needle, int $offset = 0, string $encoding = null): int|false

示例

$haystack = "你好,世界!";
$needle = "世界";

if (mb_strpos($haystack, $needle) !== false) {
    echo "包含 '世界'";
} else {
    echo "不包含 '世界'";
}

注意事项

6. 使用 substr_count() 函数

substr_count() 函数用于计算子字符串在主字符串中出现的次数。如果返回值大于0,则说明主字符串中包含子字符串。

语法

substr_count(string $haystack, string $needle, int $offset = 0, int $length = null): int

示例

$haystack = "Hello, world!";
$needle = "world";

if (substr_count($haystack, $needle) > 0) {
    echo "包含 'world'";
} else {
    echo "不包含 'world'";
}

注意事项

7. 使用 str_contains()strpos() 的性能比较

在PHP 8.0之前,strpos() 是检测字符串包含的主要方法。PHP 8.0引入的 str_contains() 提供了更直观的语法。从性能角度来看,str_contains()strpos() 的性能差异不大,但 str_contains() 的代码可读性更高。

性能测试示例

$haystack = "Hello, world!";
$needle = "world";

$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
    strpos($haystack, $needle) !== false;
}
$end = microtime(true);
echo "strpos(): " . ($end - $start) . " seconds\n";

$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
    str_contains($haystack, $needle);
}
$end = microtime(true);
echo "str_contains(): " . ($end - $start) . " seconds\n";

结果分析

通常情况下,str_contains() 的性能略优于 strpos(),但差异非常小。因此,在PHP 8.0及以上版本中,推荐使用 str_contains()

8. 总结

在PHP中,检测指定字符串中是否包含另一个字符串有多种方法,每种方法都有其适用场景。以下是各方法的总结:

根据具体需求和PHP版本,选择合适的方法可以提高代码的可读性和性能。在PHP 8.0及以上版本中,str_contains() 是最推荐的方法。

推荐阅读:
  1. java怎么判断字符串是否包含指定字符
  2. java如何判断字符串是否包含指定字符

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:Node.js+SpreadJS怎么从服务端生成Excel电子表格

下一篇:php字符串如何只留下数字

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》