cpsit / glob
A PHP 实现Ant的glob。
Requires
- php: ^7.0
- webmozart/path-util: ^2.2
Requires (Dev)
- phpunit/phpunit: ^6
- sebastian/version: *
- symfony/filesystem: ^2.5
This package is auto-updated.
Last update: 2024-08-26 23:43:48 UTC
README
实现类似Ant的glob功能的工具。
注意: 这是一个 webmozart/glob 的分支。与原始版本相比,它支持PHP >= 7.0。
我们必须将供应商名称从 Webmozart
更改为 CPSIT
语法
?
匹配任何字符*
匹配零个或多个字符,除了/
/**/
匹配零个或多个目录名[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()
函数相比,此实用程序支持
/**/
用于匹配零个或多个目录- 自定义流包装器的globbing,如
myscheme://path/**/*.css
- 将glob与路径字符串匹配
- 通过glob过滤路径字符串数组
- 如果glob包含无效语法,则抛出异常
由于PHP的本地 glob()
函数效率更高,此实用程序尽可能使用 glob()
(即当不使用特殊功能时)。
安装
使用 Composer 安装包
$ composer require webmozart/glob
用法
包的主要类是 Glob
。使用 Glob::glob()
对文件系统进行glob
use CPSIT\Glob\Glob; $paths = Glob::glob('/path/to/dir/*.css');
您还可以使用 GlobIterator
递归地搜索文件系统。但是,迭代器不保证返回排序后的结果
use CPSIT\Glob\Iterator\GlobIterator; $iterator = new GlobIterator('/path/to/dir/*.css'); foreach ($iterator as $path) { // ... }
路径匹配
该包还提供用于将路径与glob比较的实用方法。使用 Glob::match()
将路径与glob匹配
if (Glob::match($path, '/path/to/dir/*.css')) { // ... }
Glob::filter()
通过glob过滤路径列表
$paths = Glob::filter($paths, '/path/to/dir/*.css');
这也可以通过 GlobFilterIterator
递归地实现
use CPSIT\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 );
相对Glob
不支持相对glob,如 *.css
。通常,此类glob引用的是当前工作目录的相对路径。然而,此实用程序不想做出此类假设。因此,您应始终传递绝对glob。
如果您想允许用户传递相对glob,我建议使用 Webmozart Path Utility 将glob转换为绝对glob
use CPSIT\Glob\Glob; use Webmozart\PathUtil\Path; // If $glob is absolute, that glob is used without modification. // If $glob is relative, it is turned into an absolute path based on the current // working directory. $paths = Glob::glob(Path::makeAbsolute($glob, getcwd());
Windows 兼容性
Glob需要以仅包含正斜杠的规范形式传递。返回的路径仅包含正斜杠。
转义
Glob
类支持通过在任意特殊字符之前输入反斜杠字符 \
来转义
$paths = Glob::glob('/backup\\*/*.css');
在这个示例中,通配符匹配的是/backup*
目录下的所有CSS文件,而不是以/backup
开头的所有目录。由于PHP字符串中的转义特性,要在一个字符串中产生单个反斜杠\
,需要输入两个反斜杠\
。
以下是一些可用的转义序列:
\\?
:匹配路径中的?
\\*
:匹配路径中的*
\\{
:匹配路径中的{
\\}
:匹配路径中的}
\\[
:匹配路径中的[
\\]
:匹配路径中的]
\\^
:匹配路径中的^
\\-
:匹配路径中的-
\\\\
:匹配路径中的\
流包装器
Glob
类支持流包装器
$paths = Glob::glob('myscheme:///**/*.css');
作者
贡献
欢迎为该包做出贡献!
支持
如果您遇到问题,请发送邮件至bschussek@gmail.com或在Twitter上关注@webmozart。
许可证
本包的所有内容均受MIT许可证的许可。