Php 从本地到服务器的不同glob()结果(Windows与Linux)

Php 从本地到服务器的不同glob()结果(Windows与Linux),php,regex,glob,Php,Regex,Glob,我只想选择以数字或字母开头的文件: $files = glob($xsl_dir_path . "/[^a-zA-Z0-9]*.xsl"); $files = array_map('basename', $files); 有3个文件:a.xsl、b.xsl、_functions.xsl。我不想选择_functions.xsl文件 结果:本地(Windows):a.xsl,b.xsl 结果:服务器(Linux):\u function.xsl 如果您正在否定类匹配,请尝试: $files =

我只想选择以数字或字母开头的文件:

$files = glob($xsl_dir_path . "/[^a-zA-Z0-9]*.xsl");
$files = array_map('basename', $files);
有3个文件:a.xsl、b.xsl、_functions.xsl。我不想选择_functions.xsl文件

  • 结果:本地(Windows):a.xsl,b.xsl
  • 结果:服务器(Linux):\u function.xsl

如果您正在否定类匹配,请尝试:

$files = glob($xsl_dir_path . "/[a-zA-Z0-9]*.xsl");
$files = array_map('basename', $files);
*编辑(再次)*

糟糕的是,glob可能没有正则表达式作为模式匹配。
这样就不行了:
(?
(仅匹配前面带有
/
或字符串开头的filename.xsl。)


但是,为了更好地控制,请使用glob'*.*.'或其他宽泛的字符,然后使用上面的正则表达式过滤glob生成的列表。这是一个额外的步骤,但可能会在整个操作系统中获得统一的结果。

还请注意,必须转义句点,并且正则表达式不会匹配包含非字母数字字符的文件我。@Kaivosukeltaja不,我认为你不需要跳出圆点。就匹配文件名中任何位置包含非字母数字字符的文件而言,这并不完全正确。它不会匹配那些开始时不包含字母数字字符的文件,但会匹配那些包含任何非字母数字字符的文件文件名中还有其他内容。看起来,这就是OP试图实现的。这是可行的,但不能解释为什么我在windows/linux中得到了两个不同的结果……啊,我没有意识到模式
glob()
使用的不是实际的正则表达式。我坚持更正。:)linux上的glob可能是在libc中实现的,并且支持否定类([^a-zA-Z0-9])。win32上的glob是由PHP团队实现的,它不支持否定。