【发布时间】:2021-06-14 11:11:04
【问题描述】:
我想创建我的个人 realpath() 函数,它使用正则表达式并且不希望该文件存在。
到目前为止我做了什么
function my_realpath (string $path): string {
if ($path[0] != '/') {
$path = __DIR__.'/../../'.$path;
}
$path = preg_replace("~/\./~", '', $path);
$path = preg_replace("~\w+/\.\./~", '', $path); // removes ../ from path
return $path;
}
什么不正确
问题是如果我有这个字符串:
"folders/folder1/folder5/../../folder2"
它只删除第一次出现的(文件夹 5/../):
"folders/folder1/../folder2"
问题
如何删除(使用正则表达式)后跟相同数量“../”的所有文件夹?
示例
"folders/folder1/folder5/../../folder2" -> "folders/folder2"
"folders/folder1/../../../folder2" -> "../folder2"
"folders/folder1/folder5/../folder2" -> "folders/folder1/folder2"
我们可以告诉正则表达式:“~(\w+){n}/(../){n}~”,n 是贪婪的,但在两组中都相同?
【问题讨论】:
标签: php regex regex-group realpath