You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP glob如何同时匹配多个关键词关联的TXT文件?

解决PHP glob同时匹配多个前缀文件的问题

嘿,我来帮你搞定这个glob匹配的小问题!先看看你之前写法里的问题:

  • 第一种错误写法"{$searchword},{$secondword}*.txt":这种写法会被glob解析成“前缀1,前缀2*.txt”,相当于找文件名里带逗号的文件,完全不是你要的两个前缀分别匹配的效果。
  • 第二种"{$searchword,$secondword}*.txt":PHP会把$searchword,$secondword当成一个完整的变量名,显然不存在这个变量,自然解析出错。
  • 第三种"{$searchword*.txt},{$secondword*.txt}":变量里的*.txt会被当成变量名的一部分,PHP根本识别不了这种变量格式。
  • 后面用&&的写法完全不符合glob的调用逻辑,glob返回的是数组,不能用逻辑运算符直接合并结果。

正确的实现方式有两种:

方法1:正确利用GLOB_BRACE参数

GLOB_BRACE的核心语法是把每个独立的匹配模式用大括号包裹,模式之间用逗号分隔。你需要把两个前缀分别和*.txt组合成完整模式,再放进大括号里:

$matches = glob("{{$searchword},{$secondword}}*.txt", GLOB_BRACE);

举个例子,如果$searchword是"foo",$secondword是"bar",生成的模式就是{foo,bar}*.txt,glob会自动解析成匹配foo*.txt和bar*.txt的所有文件,完全符合你的需求。

方法2:两次调用glob后合并结果

如果担心GLOB_BRACE在某些环境下的兼容性(比如少数老旧系统对这个参数支持有限),可以分开调用glob再合并数组,这种方法更直观:

$matches1 = glob("$searchword*.txt");
$matches2 = glob("$secondword*.txt");
$matches = array_merge($matches1, $matches2);
// 可选操作:如果有文件同时符合两个前缀,想要去重的话
$matches = array_unique($matches);

小技巧:验证模式是否正确

你可以先打印出生成的模式字符串,确认格式没问题:

echo "{{$searchword},{$secondword}}*.txt";

比如前面的例子会输出{foo,bar}*.txt,这就是glob能正确识别的格式。

内容的提问来源于stack exchange,提问作者user9442969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:41