webmozart / glob
Ant 的 glob 的 PHP 实现。
Requires
- php: ^7.3 || ^8.0.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/filesystem: ^5.3
This package is auto-updated.
Last update: 2024-09-06 16:12:08 UTC
README
实现类似 Ant 的 globbing 的工具。
语法
?
匹配任意字符*
匹配零个或多个字符,除了/
/**/
匹配零个或多个目录名[abc]
匹配单个字符a
、b
或c
[a-c]
匹配单个字符a
、b
或c
[^abc]
匹配除了a
、b
或c
之外的任意字符[^a-c]
匹配除了a
、b
或c
之外的任意字符{ab,cd}
匹配ab
或cd
与 glob() 的比较
与 PHP 的原生 glob()
函数相比,此工具支持以下功能
/**/
用于匹配零个或多个目录- 匹配自定义流包装器,如
myscheme://path/**/*.css
- 将 globs 与路径字符串匹配
- 通过 glob 过滤路径字符串数组
- 如果 glob 包含无效语法,则抛出异常
由于 PHP 的原生 glob()
函数效率更高,此工具尽可能使用 glob()
(即在未使用特殊功能的情况下)。
安装
使用 Composer 安装此包
composer require webmozart/glob
使用方法
该包的主要类是 Glob
。使用 Glob::glob()
来 glob 文件系统
use Webmozart\Glob\Glob; $paths = Glob::glob('/path/to/dir/*.css');
您还可以使用 GlobIterator
来迭代地搜索文件系统。但是,迭代器不保证返回排序后的结果
use Webmozart\Glob\Iterator\GlobIterator; $iterator = new GlobIterator('/path/to/dir/*.css'); foreach ($iterator as $path) { // ... }
路径匹配
该包还提供了一些实用方法,用于将路径与 globs 进行比较。使用 Glob::match()
将路径与 glob 匹配
if (Glob::match($path, '/path/to/dir/*.css')) { // ... }
Glob::filter()
通过 glob 过滤路径列表
$paths = Glob::filter($paths, '/path/to/dir/*.css');
您还可以使用 GlobFilterIterator
迭代地实现相同的功能
use Webmozart\Glob\Iterator\GlobFilterIterator; $iterator = new GlobFilterIterator('/path/to/dir/*.css', new ArrayIterator($paths)); foreach ($iterator as $path) { // ... }
您还可以通过传递相应类的 FILTER_KEY
常量来过滤路径列表的键
$paths = Glob::filter($paths, '/path/to/dir/*.css', Glob::FILTER_KEY); $iterator = new GlobFilterIterator( '/path/to/dir/*.css', new ArrayIterator($paths), GlobFilterIterator::FILTER_KEY );
相对 globs
不支持像 *.css
这样的相对 globs。通常,此类 globs 指的是相对于当前工作目录的路径。然而,此工具不希望做出这样的假设。因此,您应该始终传递绝对 globs,因此鼓励使用 __DIR__
use Webmozart\Glob\Glob; $paths = Glob::glob(__DIR__ . '/*');
Windows 兼容性
必须使用正斜杠仅以规范形式传递 globs。返回的路径仅包含正斜杠。
转义
在特殊字符之前键入反斜杠字符 \
以支持 Glob
类的转义
$paths = Glob::glob('/backup\\*/*.css');
在此示例中,glob 匹配 /backup*
目录中的所有 CSS 文件,而不是以 /backup
开头的所有目录。由于 PHP 字符串中的转义,反斜杠字符 \
需要键入两次才能在字符串中产生单个 \
。
以下为可用的转义序列
\\?
: 匹配路径中的?
\\*
: 匹配路径中的*
\\{
: 匹配路径中的{
\\}
: 匹配路径中的}
\\[
: 匹配路径中的[
\\]
: 匹配路径中的]
\\^
:匹配路径中的^
\\-
:匹配路径中的-
\\\\
:匹配路径中的\
流包装器
Glob
类支持 流包装器
$paths = Glob::glob('myscheme:///**/*.css');
作者
贡献
欢迎为该软件包做出贡献!
支持
如果你遇到问题,请发送邮件至 [email protected] 或在 Twitter 上 @webmozart 发出求助。
许可协议
本软件包的所有内容均受 MIT 许可协议 许可。