[PHP] 检查是否包含指定字符串/模式时需要注意的事项

PHP

介绍

是WEB团队的草壁。
我经常忘记strpos()和preg_match()函数返回的值,所以整理了这份备忘录,并附上一些需要注意的小要点。这份备忘录
只关注某个字符串/模式是否包含在指定的字符串中,并且只解释了部分函数,​​因此请参考手册了解每个函数的详细信息。

全面的

比较值时,除非有特殊原因,否则请使用 === 和 !== 而不是 == 和 !=。
特别是,如果您对 0 == FALSE 变为 TRUE 感到意外,类型比较表建议查阅

目录

  • 检查字符串是否包含指定的字符串
  • 检查字符串是否包含指定的模式
  • 从数组中提取符合特定模式的元素

检查字符串是否包含指定的字符串

strpos() [手册]

int strpos(string $heystack, mixed $needle)

争论

heystack:要搜索的字符串。needle
:要搜索的字符串。也可以指定字符串以外的其他类型,但是……(见下文)

返回值

此函数返回 `needle` 在 heystack 中首次出现的位置(从 0 开始)。
如果 `needle` 不在 heystack 中,则返回 FALSE。

strpos($heystack, $needle) !== FALSE

你可以通过查看的值来检查是否存在。

注1

如果 needle 出现在 heystack 的顶部,则返回值为 0。

strpos($heystack, $needle) != FALSE

如果字符串出现在开头,则返回 FALSE。请务必同时比较字符串类型。

注2

在手册中

如果 needle 不是字符串,则将其转换为整数,并将其视为与该数字对应的字符。

上述内容并非
如果 needle 不是字符串,则将其转换为整数,然后再转换为字符串”。
意味着(关于转换为整数的部分是正确的。)
当 needle 不是字符串时,它被视为与转换为整数后的 needle 对应的十进制 ASCII 码字符。
换句话说,以下两种情况并不等价:

strpos('2100', 100) strpos('2100', (string)(int)100) // needle 变成字符串 100

以下三者等效:

strpos('2100', 100) strpos('2100', chr((int)100)) strpos('2100', 'd')

为避免出现意外结果,除非有特殊情况,否则最好为 `needle` 指定一个字符串。
有关 `chr()` 的更多信息,请参阅
PHP:chr - 手册。

注3

如果将数组放入 needle 中,不会发生错误,但这并不意味着可以指定多个 needle;这只是意味着数组被强制转换为整数。

从 PHP 7.0 开始,将数组强制转换为整数,空数组返回 0,非空数组返回 1。


strstr() [手册]

此函数查找“needle”首次出现的位置,并返回从该位置到字符串末尾的字符串。
如果未找到“needle”,则返回 FALSE,因此可用于检查是否存在该字符串,但不建议仅将其用于此目的。

注意:
如果您只需要检查某个针是否存在于特定的 Haystack 中,请改用速度更快、内存占用更少的 strpos()。


检查字符串是否包含指定的模式

preg_match() [手动]

int preg_match(string $pattern, string $subject)

返回值

如果主题中存在与模式匹配的字符串,则返回 1;否则返回 0;如果在匹配过程中发生错误,则返回 FALSE。

preg_match($pattern, $subject) === 1

只需确认是否为真即可。

需要注意的事项

如果您需要区分无匹配项和错误,请注意 0 == FALSE 为 TRUE。


从数组中提取符合特定模式的元素

这里,数组

$input = ['first', 'second', 'third', 'fourth', 'fifth'];

我们来看一个提取以“th”结尾的元素的例子。
最简单的方法是使用 preg_grep() 函数。

preg_grep() [手册]

array preg_grep(string $pattern, array $input)

返回值

从输入元素中提取的与模式匹配的示例数组

preg_grep('/th$/', $input) // ['fourth', 'fifth']

这是

array_filter($input, function($s) { return preg_match('/th$/', $s) === 1; })

相当于

需要注意的事项

将常量 PREG_GREP_INVERT 作为 preg_grep() 的第三个参数,不匹配的元素,以及匹配过程中出错的元素。换句话说,以下两种方法等效:

preg_grep('/th$/', $input, PREG_GREP_INVERT) array_filter($input, function($s) { return preg_match('/th$/', $s) !== 1; })

#没有定义常量来明确指定“提取与模式匹配的元素”,因此,如果要提取匹配的元素,请省略第三个参数或指定 0。

如果您觉得这篇文章对您有帮助,请点个“赞”!
2
加载中...
2票,平均分:1.00/12
8,603
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者