【问题标题】:How File matching patterns exactly works using Asterisk?文件匹配模式如何使用 Asterisk 准确工作?
【发布时间】:2019-12-02 05:47:33
【问题描述】:

我有以下文件:

C:\files\file1.dll
C:\files\file2.dll
C:\files\sample\sample1.dll
c:\files\sample\sample2.dll
c:\files\book\book1.dll
c:\files\book\book2.dll
c:\files\book\comic\comic1.dll
c:\files\book\comic\comic2.dll

模式 1 是 *\*.dll,模式 2 是 *\comic\*.dll,模式 3 是 book\*\*.dll。哪些文件应该匹配pattern1pattern2pattern3

【问题讨论】:

  • 抱歉,pattern1 是 *\*.dll,pattern 3 是 book\*\*.dll

标签: c# file pattern-matching matching


【解决方案1】:

第一个模式应该匹配通配符匹配中的所有内容。你基本上是在说。

包含\并以.dll结尾

第二个应该与最后两个匹配。

包含\comic\ 并以.dll 结尾

最后一个应该不匹配。

book\ 开头包含\ 并以.dll 结尾

这当然是用于Matching strings with wildcard 此处所述的模式匹配,而不是正则表达式。

glob 的世界中,情况并非如此:

** 匹配任何字符,包括正斜杠 /

* 匹配除正斜杠以外的任何字符(仅匹配文件或目录名称)

所以这样想吧。第一个模式只会匹配第一个和第二个。通过使用你所说的双 **,我也关心子目录。

很好的解释和更多的例子:here

【讨论】:

  • 感谢您的快速回复,但我认为 * 表示指定源文件夹中的所有文件。 ** 表示指定源文件夹中的所有文件和所有子文件夹中的所有文件,如copy files task azure。因此,通过使用 azure 复制任务,pattern1 不匹配 - file1.dll、file2.dll、sample1.dll、sample2.dll、book1.dll 和 book2.dll?模式 3 匹配 - book1.dll、book2.dll、comic1.dll、comic2.dll
  • 所以您尝试使用man7.org/linux/man-pages/man3/fnmatch.3.html 进行匹配。好的,既然我知道您要达到的目标,我可能会提供更多帮助。
  • 谢谢,有点明白了。但是 C:\files\*\*.dll 模式如何适用于上述文件?
  • 它应该返回第 2 行、第 3 行、第 4 行和第 5 行。不是第一个或最后两个。
  • 超级,最后一个疑问 - c:\files\**\*.dll 模式匹配所有文件,但为什么 c:\files\*\*.dll 模式不匹配 1 到 6 行但只匹配 3 到 6 行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2015-07-02
  • 2014-07-20
  • 2013-02-12
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多