Bash用于匹配文件名的正则表达式是什么?

时间:2011-07-21 21:46:28

标签: regex bash pattern-matching

  

可能重复:
  Create regex from glob expression

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

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

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

1 个答案:

答案 0 :(得分:0)

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

特殊符号可能必须翻译成“通常”正则表达式。

示例性地,如果我们考虑*.dat,我们必须将*转换为.*,将.转换为\.。此外,我们必须将?(匹配一个字符)更改为.。字符组[abc]应基本保持不变,可能会调整一些特殊符号。而且你必须识别转义字符,例如\*并对其进行充分处理(如果是\*,请将其留在那里)。

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

但是,你一定要看看@WoLpH提供的link