[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

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

PHP

介绍

我是 WEB 团队的日下。
我经常忘记 strpos() 或 preg_match() 的返回值是什么并查找它,因此我用一些简单的注释进行了总结以供提醒。
重点仅在于是否包含指定的字符串/模式,并且只解释了部分函数,​​因此每个函数的详细信息请参阅手册。

总体上可以说些什么

比较值时,请使用 ===、!== 而不是 ==、!=,除非您有充分的理由这样做。
特别是如果您发现 0 == FALSE 变为 TRUE 感到惊讶,我们建议您查看类型比较表

目录

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

检查是否包含指定字符串

strpos() [手册]

int strpos(字符串$heystack,混合$needle)

争论

heystack:要搜索的字符串。
针:要搜索的字符串。也可以指定字符串以外的类型...(稍后描述)

返回值

返回在 heystack 中第一次出现的位置(从 0 开始)。
如果heystack中不包含needle,则返回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) // 针变成字符串 100

下面三个是等价的:

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

为了避免出现意想不到的后果,除非有特殊情况,最好指定一根线作为针。
单击此处获取 chr()
PHP:chr - 手册

注3

如果将数组插入到needle中,则不会导致错误,但这并不意味着您可以指定多个needle;该数组将简单地转换为整数。

#从 PHP 7.0 开始,将数组转换为整数将导致 0 表示空数组,1 表示非空数组。


strstr() [手册]

该函数查找第一次出现的needle,并从那里返回到字符串的末尾。
如果未找到needle,则返回FALSE,因此可以用来检查是否存在,但不建议仅将此函数用于此目的。

注意:
如果您只是想检查特定的大海捞针中是否存在针,请使用 strpos(),它速度更快,占用的内存更少。


检查是否包含指定的模式

preg_match() [手册]

int preg_match(字符串$pattern, 字符串$subject)

返回值

如果主题中存在字符串匹配模式,则返回 1,否则返回 0,如果匹配过程中发生错误,则返回 FALSE。当检查是否存在时

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

您所要做的就是检查是否为 TRUE。

注意事项

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


从数组中提取与模式匹配的元素

这里是数组

$input = ['第一', '第二', '第三', '第四', '第五'];

考虑一个从 中提取以 th 结尾的元素的示例。
一个简单的方法是使用 preg_grep()。

preg_grep() [手册]

数组 preg_grep(字符串 $pattern, 数组 $input)

返回值

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

preg_grep('/th$/', $input) // ['第四', '第五']

这是

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
7,709
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者