soit / glob-webmozart-fork
Requires
- php: ^5.3.3|^7.0
- webmozart/path-util: ^2.2
Requires (Dev)
- phpunit/phpunit: ^4.6
- sebastian/version: ^1.0.1
- symfony/filesystem: ^2.5
This package is not auto-updated.
Last update: 2024-09-28 12:04:10 UTC
README
最新版本:4.1.0
实现类似Ant的glob工具。
语法
?匹配任意字符*匹配零个或多个字符,但不能是//**/匹配零个或多个目录名[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 - 将glob与路径字符串匹配
- 通过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) { // ... }
路径匹配
包还提供了比较路径与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 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 );
相对glob
不支持如 *.css 的相对glob。通常,此类glob指的是当前工作目录的相对路径。然而,本工具不希望做出此类假设。因此,您应始终传递绝对glob。
如果您想允许用户传递相对glob,我建议使用Webmozart Path Utility 将glob转换为绝对glob
use Webmozart\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许可协议的许可。