我正在检查 perl 中的 ZIP-Archive 是否包含文件夹/结构是否正常。到目前为止,根目录包含一个 sourcen 目录/sourcen。RegExp^sourcen为我做了这个。
现在我有一个新案例。根目录可能在 sourcen-dir 之前包含一个子目录,因此它看起来像这样:
/sourcen
/SUBDIR/sourcen
Run Code Online (Sandbox Code Playgroud)
但它可能没有更多这样的子目录:
/SUBDIR/SUBDIR/sourcen
/SUBDIR/SUBDIR/SUBDIR/sourcen
/SUBDIR/SUBDIR/SUBDIR/SUBDIR/sourcen
...
Run Code Online (Sandbox Code Playgroud)
是否可以使用 RegExp 来验证源目录是在根目录中还是只有一个子目录“较低”?
检查/sourcen或/other/sourcen
$dir =~ m{^/ (?: [^/]+ / )? sourcen}x;
Run Code Online (Sandbox Code Playgroud)
在/x允许的空间内,以提高可读性。使用{}分隔符而不是习惯//用法/,以便我们可以在模式中使用而无需转义它。(然后我们必须m在前面,它可以用//分隔符省略。)
通过添加().
我们从 ( ^)开始,/因为它从根开始。
在[^/]+用于没有任何字符检查/,一次或更多次(+)。所以它匹配一串字符直到第一个/. 该构造[^...]称为否定字符类。在 perlretut和perlrecharclass 中查看它。接着是literal /,需要另一个目录。
所有这些都在内部(?: )进行分组,以便可以通过以下方式将其设为可选?(零次或一次)。在?:有使整个图案内部没有捕获通过(),因为这里没有必要的,但仅进行分组。
因此模式(?:[^/]+/)?是可选的第一个目录。
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |