RegExp - 从root或root + 1子目录匹配

时间:2016-11-29 08:09:39

标签: regex perl

如果包含的文件夹/结构正常,我正在检查perl中的ZIP-Archive。到目前为止,根目录包含一个sourcen目录/sourcen。 RegExp ^sourcen为我做了这个。

现在我有一个新案例。根目录可能在sourcen-dir之前包含一个子目录,因此它看起来像这样:

/sourcen
/SUBDIR/sourcen

它可能没有多于一个的子目录,如下所示:

/SUBDIR/SUBDIR/sourcen
/SUBDIR/SUBDIR/SUBDIR/sourcen
/SUBDIR/SUBDIR/SUBDIR/SUBDIR/sourcen
...

是否可以使用RegExp验证sourcen dir是root还是只有一个子目录'lower'?

1 个答案:

答案 0 :(得分:4)

检查/sourcen/other/sourcen

$dir =~ m|^/ (?: [^/]+ / )? sourcen|x;

/x允许内部空格,以提高可读性。使用|代替习惯/,以便我们可以在模式中使用/而无需转义它。

通过添加(),能够分辨出捕获整个事物(或其部分)的情况。

我们以^开始(/),因为这是从root开始的。

[^/]+检查任何非/的字符,一次或多次(+)。所以它匹配一个字符串直到第一个/。构造[^...]被称为否定字符类。见in perlretutin perlrecharclass。 接下来是文字/,需要另一个目录。

所有这些都在(?: )内进行分组,以便可以通过以下?(零次或一次)使其成为可选项。 ?:就在那里,因此()内的整个模式不是捕获,而只是分组。

因此模式(?:[^/]+/)?是可选的第一个目录。