使用正则表达式解析有效的父目录

时间:2014-05-05 02:47:29

标签: regex

给定字符串a/b/c/d表示完全限定的子目录,我想为父树的每一步生成一系列字符串,即a/b/ca/ba

使用正则表达式,我可以执行非贪婪的/(.*?)\//,它会为我提供abc的匹配或贪婪的/(.*)\//给我一个a/b/c的匹配。有没有办法可以在单个正则表达式中获得上面指定的预期结果,或者它本身是否无法创建两个吃相同字符的匹配项(如果有意义的话)?

如果这个问题在其他地方得到解答,请告诉我......我看了,但一无所获。

请注意,这个问题是关于是否可以使用正则表达式。我知道除了正则表达式之外还有很多方法。

3 个答案:

答案 0 :(得分:1)

基于this other question中的想法的一个解决方案:

  • 反转要匹配的字符串:d/c/b/a例如在PHP中使用strrev($string )
  • (?=(/(?:\w+(?:/|$))+))
  • 匹配

这会给你

/c/b/a
/b/a
/a

然后使用strrev($string )

反转匹配

这会给你

a/b/c/
a/b/
a/

如果您使用的是.NET而不是PCRE,那么您可以从右到左进行匹配,并且可以提供相同的功能。

答案 1 :(得分:1)

完全不同的答案,没有倒转字符串。

(?<=((?:\w+(?:/|$))+(?=\w)))

匹配

a/
a/b/
a/b/c/

但你必须使用C#,它使用变量lookbehind

答案 2 :(得分:0)

是的,可能:

/([^\/]*)\//

所以基本上它会用.*?替换你的[^/]*,而且不一定非贪婪。由于/在您的案例中是一个特殊字符,因此您必须将其转义,例如:[^\/]*