给定字符串a/b/c/d
表示完全限定的子目录,我想为父树的每一步生成一系列字符串,即a/b/c
,a/b
和a
。
使用正则表达式,我可以执行非贪婪的/(.*?)\//
,它会为我提供a
,b
和c
的匹配或贪婪的/(.*)\//
给我一个a/b/c
的匹配。有没有办法可以在单个正则表达式中获得上面指定的预期结果,或者它本身是否无法创建两个吃相同字符的匹配项(如果有意义的话)?
如果这个问题在其他地方得到解答,请告诉我......我看了,但一无所获。
请注意,这个问题是关于是否可以使用正则表达式。我知道除了正则表达式之外还有很多方法。
答案 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)
是的,可能:
/([^\/]*)\//
所以基本上它会用.*?
替换你的[^/]*
,而且不一定非贪婪。由于/
在您的案例中是一个特殊字符,因此您必须将其转义,例如:[^\/]*
。