我在确定如何强制重复模式作为正则表达式中的条件时遇到了一些困难。
以下是一个展示问题的示例:
$path = '/foo/../../bar/../something/../results/in/skipthis/../this/';
$vpath = preg_replace('/(.*\/\.\.\/)/', '/', $path );
上述正则表达式与/foo/../../bar/../something/../results/in/skipthis/../
匹配,因为它将/foo/../../bar/../something/../results/in/skipthis/
视为条件的.*\/
部分,但它应与以下列表匹配:
foo/../
../../
bar/../
something/../
skipthis/../
并相应地替换它们。请注意,我期望看到的结果中没有正斜杠,并且它是所有结果的列表 - 不是从第一个找到的匹配开始到结尾的最后一个结尾的宽结果。找到的比赛。
以上列表是我希望匹配的 - 但是......正则表达式必须允许无限.*/../
次匹配。
提前致谢。
答案 0 :(得分:0)
在匹配中尝试[^/]*
而不是.*
。它可能是[!/]*
而不是[^/]*
。
以下是使用sed的示例:
sed 's,[^/]*/\.\./,/,g'
foo/../
/
../../
/
bar/../
/
something/../
/
skipthis/../
/
注意每隔一行输入,其余的输出。