【问题标题】:What is the regular expression that Bash uses to match file names? [duplicate]Bash 用来匹配文件名的正则表达式是什么? [复制]
【发布时间】:2011-10-10 15:01:06
【问题描述】:

可能重复:
Create regex from glob expression

我们知道 Bash 不使用正则表达式来匹配文件名。例如: *.dat 将匹配所有带有 dat 扩展名的文件名。但是,正则表达式形式的相同模式将是:.*\.dat

我的问题是如何采用 Bash 样式的模式并将其转换为匹配相同文件名的有效正则表达式。

为简单起见,让我们忽略各种 Bash 扩展,假设 Bash not 对待 。 .. 和 / 分开。

【问题讨论】:

  • 你想转换成什么样的正则表达式?
  • 如果有的话,bash 版本更接近 ASCII \ {'*'} 上的“真实”正则表达式,而不是您提供的“真实”事物(perl?)。

标签: regex bash pattern-matching


【解决方案1】:

我认为这不应该太复杂。非特殊字符可以保持原样。

可能必须将特殊符号转换为“常用”正则表达式。

例如,如果我们考虑*.dat,我们必须将* 转换为.*,并将. 转换为\.。此外,我们必须将?(匹配一个字符)更改为.。字符组[abc] 应该基本保持不变,可能会调整一些特殊符号。而且您必须识别转义字符,例如\* 并适当对待它们(如果是 \*,就留在那里)。

因此,您所要做的就是创建一个特殊符号列表及其在常用正则表达式中的对应等价物。

但是,您绝对应该看看@WoLpH 提供的link

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多