【发布时间】:2013-04-13 11:23:59
【问题描述】:
我正在开发允许用户为文件夹层次结构中的项目指定“通配符”路径以及当项目与该路径匹配时将执行的相关操作的功能。例如:
Path Action
----------- -------
1. $/foo/*/baz include
2. $/foo/bar/* exclude
现在以上面的示例为例,$/foo/bar/baz 处的项目将匹配这两个操作。鉴于此,我想提供通配符路径特异性的粗略分数,这将基于第一个通配符出现的“深度”。最深的路径将获胜。重要的是,只有以正斜杠 (/*/) 为界的 * 允许作为通配符(除非最后是 /*),并且可以在路径中的各个点指定任意数字。
TL;DR;
所以,我认为在第一个 * 之前计算正斜杠数量的正则表达式是可行的方法。但是由于多种原因,如果路径中没有通配符,正斜杠的匹配将为零。我不得不进行以下负面回顾:
(?<!\*.*)/
当有通配符时效果很好(例如,2 个正斜杠匹配上面的路径#1,3 个匹配#2),但是当没有通配符时,它自然匹配所有正斜杠。我确信这是一个简单的步骤,但由于生锈的正则表达式技能,我被卡住了。
理想情况下,从学术角度来看,我想看看单个正则表达式是否可以捕捉到这一点,但是为更优雅的问题解决方案提供了奖励积分!
【问题讨论】:
-
在调用正则表达式之前,您可以检查字符串中的星号吗?
if(path.Contains("*")) DoRegex(); -
当然。抱歉,应该说这更像是一个学术问题,看看它是否可以用一个表达式来完成。
-
啊,我明白了 :) 有趣的问题。
-
Arghh,刚刚看到您追求的是更学术的答案,而不是问题的解决方案。好吧,我应该专注于那个:-(
-
一切都很好@Renaud。 +1。我喜欢这个解决方案,它可能比纯正则表达式路线更好!谢谢。