【问题标题】:php "glob" pattern helpphp“glob”模式帮助
【发布时间】:2011-04-18 12:55:37
【问题描述】:

我有一个包含站点地图的目录,它们都以数字结尾。

我有一个自动站点地图生成器脚本,它需要使用 glob 计算文件夹中的所有站点地图。

目前我被困在这里。

我需要计算所有包含数字的站点地图文件,因此我不计算没有数字的站点地图文件。

例如,在我的根目录中,我有一个 sitemap.xml 文件,然后我还有 sitemap1.xml、sitemap2.xml、sitemap3.xml 等...

我需要使用 glob 仅在文件名包含“sitemap1.xml”之类的数字时才返回 true。

这可能吗?

$nr_of_sitemaps = count(glob(Sitemaps which contains numbers in their filenames)); 

谢谢

【问题讨论】:

  • Afaik,不,glob 帮不了你。您必须检索所有名称并循环检查它们。

标签: php html xml


【解决方案1】:

要获取以<digit>.xml 结尾的文件,您可以使用如下模式:

*[0-9].xml

所以要计算匹配项,PHP 可能如下所示:

$count = count(glob('/path/to/files/*[0-9].xml'));

如果您想要对匹配文件进行超精细控制(比 glob 所能提供的更多),您可以使用通用模式,然后使用 preg_grep 将结果数组过滤到您想要的精确位置。

$count = count(
    preg_grep(
        '#(?:^|/)sitemap\d{1,3}\.xml$#',
        glob('/path/to/files/sitemap*.xml')
    )
);

另见:http://cowburn.info/2010/04/30/glob-patterns/

【讨论】:

  • 所以在我的例子中: glob('sitemap[0-9].xml') ?即使有几个数字,这也必须有效,例如“sitemap43.xml”。
  • 不,[0-9] 只会匹配一个数字。如果您想满足可变数量的数字,请使用我的正则表达式建议,或者如果误报也不匹配,则可以使用 sitemap*[0-9].xml
  • +1 用于 preg_grep。非常有用但被低估的功能。
猜你喜欢
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2011-02-12
  • 2011-03-15
相关资源
最近更新 更多