如果包含的文件夹/结构正常,我正在检查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'?
答案 0 :(得分:4)
检查/sourcen
或/other/sourcen
$dir =~ m|^/ (?: [^/]+ / )? sourcen|x;
/x
允许内部空格,以提高可读性。使用|
代替习惯/
,以便我们可以在模式中使用/
而无需转义它。
通过添加()
,能够分辨出捕获整个事物(或其部分)的情况。
我们以^
开始(/
),因为这是从root开始的。
[^/]+
检查任何非/
的字符,一次或多次(+
)。所以它匹配一个字符串直到第一个/
。构造[^...]
被称为否定字符类。见in perlretut和in perlrecharclass。
接下来是文字/
,需要另一个目录。
所有这些都在(?: )
内进行分组,以便可以通过以下?
(零次或一次)使其成为可选项。 ?:
就在那里,因此()
内的整个模式不是捕获,而只是分组。
因此模式(?:[^/]+/)?
是可选的第一个目录。